我有一个非常奇怪的问题。我有两台服务器,即daytona
,用作带有 raid 阵列的存储服务器。当我想要备份时我会大声喊它。第二台服务器testarossa
运行我的服务。我想每天使用口是心非来备份后者。两台机器都运行完全最新的 Ubuntu Server 14.04。
我编写了一个脚本来WOL机器,然后每天在固定时间执行口是心非备份。
备份脚本的导入部分如下所示。备份以root
on用户身份运行,并通过ontestarossa
进行 SSH 备份。然后它通过使用 user on关闭。backupper
daytona
ssh
christophe
daytona
我已经配置了 ssh 密钥,testarossa
这样我就可以通过 ssh 来daytona
使用backupper
和christophe
。我可以很好地执行脚本中的命令,甚至也可以在 shell 中执行脚本 ( ./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 通的功能。因此,它仅在主机完全启动后才开始备份。 (这个脚本在另一台装有 Debian 的机器上运行良好一年多。)
2) 该脚本确实在 root 的 shell 中运行良好。
3)不,我在两个设置文件中都没有代理命令。
4)我尝试使用运行命令sudo /bin/bash /root/scripts/dailybackup
,现在,由于某种原因,它要求我验证主机的真实性(使用yes/no
)。那么现在看来口是心非命令没有使用我的known_hosts
文件?
答案1
错误“协议不匹配”。很简单:nc不使用ssh协议来连接远程地址和端口。
关于实际问题:backupper 用户是否通过 ssh 密钥连接?如果是这样,钥匙存放在哪里?
我认为正在发生的事情是您使用除 root 之外的其他用户测试脚本。
尝试像这样以 root 身份运行脚本,看看它是否也失败:
sudo /bin/bash /root/scripts/dailybackup
其他人也有同样的错误,因为IP冲突