强制 rsync 进入非交互模式

Ada*_*tan 8 shell rsync

我想在 python 脚本中使用 rsync。我使用subprocess模块调用它,并使用存储在authorized_key远程机器上的文件中的公钥进行身份验证。

唯一的问题是,当我使用错误的远程用户名使用 rsync 时,会提示我输入密码,这显然会永远停止备份脚本。

rsync如果无法进行身份验证,我是否可以强制退出并显示错误,而不是提示输入密码?

乌迪

Gus*_*uss 9

假设您将 rsync 与 SSH 远程 shell 一起使用(而不是 - 例如 - 与 rsync 服务器一起使用),那么您可以让 rsync 以永远不会要求密码的方式运行 SSH。例如,一旦可以使用这个调用:

rsync -e 'ssh -o "NumberOfPasswordPrompts 0"' source user@target:/path
Run Code Online (Sandbox Code Playgroud)

这将强制 rsync 在 0 次可能的密码尝试中使用 SSH - 如果它无法使用其他身份验证方法(如公钥或 GSSAPI)获得访问权限,那么它将失败并出现错误。请注意,当发生这种情况时 rsync 不会喜欢你,并且会大声向 STDERR 抱怨并以退出代码 255 中断。


Cha*_*utt 5

以下是我用来保持安静的 ssh 命令行选项。

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no

如果您不维护 known_hosts 文件并且担心收到 MitM 警告,则只需要主机密钥。我没有按照 James F 的建议指定身份验证类型,而是必须明确限制密码身份验证。不过,我使用它来攻击数百个具有几个不同操作系统版本的主机,因此它可能只是不兼容。

  • @Mick:像这样的批评的问题在于它们在某些情况下是完全不合适的。例如,我工作的环境中,rsync 操作的目标通常是实验室深处的专用网络中的许多嵌入式系统。根本没有与外界的连接,构建系统需要能够将更新的代码推送到目标上。这是 ssh 和 rsync 的完全合法使用,显而易见的解决方案是关闭主机检查。对此制定绝对的规则根本没有任何意义。 (2认同)