我想在python脚本中使用rsync。我使用subprocess
模块调用它,并使用存储在authorized_key
远程计算机上文件中的公共密钥进行身份验证。
唯一的问题是,当我使用错误的远程用户名使用rsync时,系统会提示我输入密码,这显然会永远终止备份脚本。
rsync
如果无法验证,是否可以强制退出并提示错误?
乌迪
我想在python脚本中使用rsync。我使用subprocess
模块调用它,并使用存储在authorized_key
远程计算机上文件中的公共密钥进行身份验证。
唯一的问题是,当我使用错误的远程用户名使用rsync时,系统会提示我输入密码,这显然会永远终止备份脚本。
rsync
如果无法验证,是否可以强制退出并提示错误?
乌迪
Answers:
这是我用来保持安静的ssh命令行选项。
ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no
仅当您不维护known_hosts文件并且担心收到MitM警告时,才需要主机密钥。与其指定James F所建议的身份验证类型,不如明确限制密码身份验证。但是,我用它来击中具有几个不同OS版本的数百台主机,因此这可能只是不兼容。
根据您启动rsync的方式,不给它TTY或PTY可能会有所帮助。
许多程序在决定提示用户输入之前会检查它们是否具有可控制的TTY。system()和类似调用的默认行为是为子程序提供tty,但是您可以禁用它。
如果您同时控制两个系统,并且希望在解决此问题的同时避免使用密码验证以获取安全性,则还可能完全在远程侧禁用密码验证。
如果您正在通过SSH执行rsync,则可以将以下内容添加到有关主机的ssh_config文件中,或通过-o命令行开关:
PreferredAuthentications publickey
快速测试(仅ssh而不是rsync)导致在不提示我输入密码而不接受我的公钥时SSH立即退出。