스크립트

스크립트

매우 이상한 문제가 있습니다. 두 대의 서버가 있습니다. 즉, daytonaRAID 어레이가 있는 스토리지 서버로 사용됩니다. 나는 백업하고 싶을 때 소리를 지른다. 두 번째 서버가 testarossa내 서비스를 실행합니다. 나는 일상적인 이중성을 사용하여 후자를 백업하고 싶습니다. 두 시스템 모두 완전히 최신 Ubuntu Server 14.04를 실행하고 있습니다.

머신에 WOL 스크립트를 작성한 후 매일 정해진 시간에 이중 백업을 수행했습니다.

백업 스크립트의 가져오기 부분은 아래와 같습니다. 백업은 rooton 사용자로 실행되고 testarossaSSH 백업은 on을 통해 수행됩니다. 그런 다음 user on을 사용하여 닫힙니다.backupperdaytonasshchristophedaytona

및 를 사용할 testarossa수 있도록 SSH 키를 구성했습니다 . 스크립트에서 명령을 잘 실행할 수 있고 심지어 쉘( )에서도 스크립트를 실행할 수 있습니다.daytonabackupperchristophe./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-opensslcronjob이 정상적으로 실행되었습니다. 그러나 더 이상 그렇지 않습니다.

이것을 디버깅하는 방법을 모르겠습니다. 고칠 수 있는 경험이 너무 적습니다. 어떤 충고?

스크립트

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 충돌

관련 정보