매우 이상한 문제가 있습니다. 두 대의 서버가 있습니다. 즉, daytona
RAID 어레이가 있는 스토리지 서버로 사용됩니다. 나는 백업하고 싶을 때 소리를 지른다. 두 번째 서버가 testarossa
내 서비스를 실행합니다. 나는 일상적인 이중성을 사용하여 후자를 백업하고 싶습니다. 두 시스템 모두 완전히 최신 Ubuntu Server 14.04를 실행하고 있습니다.
머신에 WOL 스크립트를 작성한 후 매일 정해진 시간에 이중 백업을 수행했습니다.
백업 스크립트의 가져오기 부분은 아래와 같습니다. 백업은 root
on 사용자로 실행되고 testarossa
SSH 백업은 on을 통해 수행됩니다. 그런 다음 user on을 사용하여 닫힙니다.backupper
daytona
ssh
christophe
daytona
및 를 사용할 testarossa
수 있도록 SSH 키를 구성했습니다 . 스크립트에서 명령을 잘 실행할 수 있고 심지어 쉘( )에서도 스크립트를 실행할 수 있습니다.daytona
backupper
christophe
./script.sh
다음 명령을 사용하여 cronjobs에 스크립트를 추가했습니다.
0 10 * * * /bin/bash /root/scripts/dailybackup >> /var/log/backup.daily.log 2>&1
cronjob이 실행될 때마다 다음 오류가 발생합니다.
BackendException: ssh connection to [email protected]:22 failed: [Errno 111] Connection refused
제안하고 #ubuntu-server
시도해 보았는데 echo "" | nc 192.168.1.120 22
다음과 같은 오류가 반환됩니다.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
Protocol mismatch.
이를 통해 나는 업그레이드해야 한다고 확신했고, daytona
그렇게 했습니다. 패키지가 업그레이드되었고 gnu-openssl
cronjob이 정상적으로 실행되었습니다. 그러나 더 이상 그렇지 않습니다.
이것을 디버깅하는 방법을 모르겠습니다. 고칠 수 있는 경험이 너무 적습니다. 어떤 충고?
스크립트
serverip=192.168.1.120
servermac=14:DA:E9:4C:6E:17
attempts=50
sourcedir="/"
targetdir="sftp://[email protected]//mnt/raidarr0/backups/testarossa/duplicity/daily"
encryptkey="AC7A8F8C"
keep="1M"
sudouser="christophe"
fullbackup=""
## Load in the passphrase file env variable
. /root/.passphrase
export PASSPHRASE
## Do the snapshot backup
if [ "$fullbackup" == "full" ]; then
$(which duplicity) full --encrypt-key "$encryptkey" --exclude /srv --exclude /usr --exclude /cdrom --exclude /lib64 --exclude /bin --exclude /sbin --exclude /boot --exclude /dev --exclude /proc --exclude /sys --exclude /tmp --exclude /run --exclude /mnt --exclude /media --exclude /lost+found "$sourcedir" "$targetdir"
else
$(which duplicity) --encrypt-key "$encryptkey" --exclude /srv --exclude /usr --exclude /cdrom --exclude /lib64 --exclude /bin --exclude /sbin --exclude /boot --exclude /dev --exclude /proc --exclude /sys --exclude /tmp --exclude /run --exclude /mnt --exclude /media --exclude /lost+found "$sourcedir" "$targetdir"
fi
echo "Backup to target completed."
## Remove older backups. We only want to backup 30 days.
# (We have a full every month)
$(which duplicity) remove-older-than "$keep" --force "$targetdir"
echo "Removal of stale backups completed"
## Shut down the machine using a sudo account. Expects the user to have a key installed for this.
ssh "$sudouser"@"$serverip" "sudo shutdown -h now"
echo "Shutdown command issued to remote machine"
후속 조치:
1) 이 스크립트에는 호스트가 ping이 가능할 때까지 기다리는 기능이 있습니다. 따라서 호스트가 완전히 부팅된 후에만 백업을 시작합니다. (이 스크립트는 데비안이 설치된 다른 컴퓨터에서 1년 넘게 잘 실행되었습니다.)
2) 스크립트는 루트 쉘에서 제대로 실행됩니다.
3) 아니요, 두 설정 파일 모두에 프록시 명령이 없습니다.
4) run 명령을 사용해 보았 sudo /bin/bash /root/scripts/dailybackup
더니 이제 어떤 이유로 호스트(사용됨 yes/no
)의 신뢰성을 확인하라는 메시지가 표시됩니다. 이제 이중성 명령이 내 known_hosts
파일을 사용하지 않는 것 같습니까?
답변1
"프로토콜 불일치" 오류. 간단합니다. nc는 원격 주소와 포트에 연결하기 위해 SSH 프로토콜을 사용하지 않습니다.
실제 질문과 관련하여 백업 사용자가 SSH 키를 통해 연결합니까? 그렇다면 키는 어디에 저장되어 있나요?
내 생각에 무슨 일이 일어나고 있는지는 루트가 아닌 다른 사용자로 스크립트를 테스트하고 있다는 것입니다.
다음과 같이 루트로 스크립트를 실행해보고 실패하는지 확인하세요.
sudo /bin/bash /root/scripts/dailybackup
다른 사람들도 같은 오류가 발생하기 때문에IP 충돌