我有一个python脚本执行scp操作,将文件从一台Synology DiskStation(运行Linux)传输到本地网络上的几台Mac OSX计算机。我在所有涉及的机器上设置了RSA私钥/公钥对。如果我作为管理员用户从NAS驱动器调用此python脚本,那么一切都按预期完成。我的NAS驱动器crontab文件指定相同的管理员用户以完全相同的方式运行脚本。但是,scp失败,退出状态代码为1.
什么可能导致这种行为?
[更新]
使用scp -v(或scp -vv)报告更多信息。我还可以看到它提供了正确的密钥,并且身份验证正在按预期工作。现在我也注意到它已经在一些OSX机器上工作了,但不是全部。
答案 0 :(得分:0)
我验证了.ssh / known_hosts和.ssh / authorized_keys都适用于管理员,但不适用于root。出于某种原因,当在crontab下运行python脚本时,检查的.ssh / known_hosts是根known_hosts而不是admin用户known_hosts。所以这个挑战是在scp命令期间提出的,因为它不是tty,它只是检查了根的known_hosts文件,没有找到远程主机并且失败了。将所有OSX远程主机添加到known_hosts文件后,它运行顺利。
我认为另一种(更安全的)解决方案可能是在admin用户下安装一个单独的crontab,但我所做的只是更快。