我每 3 小时从另一台 PC 复制一次图像。但最近我遇到了一个错误。当我尝试ssh
访问那台 PC 时,我得到了以下信息:
Unable to negotiate with 192.xxx.xx.xx port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
我搜索了该错误的解决方案并找到了以下结果:
-oKexAlgorithms=+diffie-hellman-group1-sha1
如果我尝试在终端中使用 运行该程序ssh
,错误就会消失,但我希望在脚本中实现该功能。这就是我想出的办法:
sshpass -p ${pass} rsync -v --include="*/" --include="*.png" --exclude="*" --no-o --no-g --no-perms --omit-dir-times ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 ${usr}@${servip}:
但是我得到了这个错误:
Unexpected remote arg: [email protected]:/home/nwpops/wrfcntl/plots/op01/20220419_0000/d01/f00000/pcpacc1h_mm.png
rsync error: syntax or usage error (code 1) at main.c(1372) [sender=3.1.3]
任何建议都值得赞赏。
答案1
因此,我已经研究了好几天,因为有很多不同的解决方案,但它们似乎都没有在我的自动 rsync 备份脚本中起作用SlickStack。
这是我最终想出的功能:
function ss_rsync_backup {
rsync -acz --mkpath --rsh="sshpass -p ${RSYNC_PASSWORD} ssh -o StrictHostKeyChecking=no -l ${RSYNC_USER}" "$@"
}
然后像这样使用:
ss_rsync_backup /var/www/html/ "${RSYNC_USER}"@"${RSYNC_REMOTE_HOST}":slickstack/"${SITE_DOMAIN_EXCLUDING_WWW}"/html/
rsync 命令语法的敏感度和复杂性实际上有点令人疯狂...我认为它们在向后兼容性方面遇到了一些困难,所以它就是这样。
与其他 Linux 实用程序不同,如果您在 StackOverflow 上浏览各种选项/标志并尝试将它们组合起来,则可能会破坏某些东西……语法的格式非常重要。
apt install sshpass
在使用该脚本之前也请务必这样做。
-e
注意:如果您使用我上面使用的格式,则不需要该标志。
谢谢:https://itecnote.com/tecnote/r-how-to-pass-password-automatically-for-rsync-ssh-command/