脚本

脚本

我有一个非常奇怪的问题。我有两台服务器,即daytona,用作带有 raid 阵列的存储服务器。当我想要备份时我会大声喊它。第二台服务器testarossa运行我的服务。我想每天使用口是心非来备份后者。两台机器都运行完全最新的 Ubuntu Server 14.04。

我编写了一个脚本来WOL机器,然后每天在固定时间执行口是心非备份。

备份脚本的导入部分如下所示。备份以rooton用户身份运行,并通过ontestarossa进行 SSH 备份。然后它通过使用 user on关闭。backupperdaytonasshchristophedaytona

我已经配置了 ssh 密钥,testarossa这样我就可以通过 ssh 来daytona使用backupperchristophe。我可以很好地执行脚本中的命令,甚至也可以在 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冲突

相关内容