如何在自动 shell 脚本中将 SSHPASS 与 rsync 和 SSH 结合使用?

如何在自动 shell 脚本中将 SSHPASS 与 rsync 和 SSH 结合使用?

我每 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/

相关内容