0

我有一个 python 脚本,它执行 scp 操作以将文件从一台 Synology DiskStation(运行 Linux)传输到本地网络上的几台 Mac OSX 计算机。我已经在所有涉及的机器上设置了 RSA 私钥/公钥对。如果我以管理员用户身份从 NAS 驱动器调用此 python 脚本,那么一切都按预期工作。我的 NAS 驱动器 crontab 文件指定相同的管理员用户以完全相同的方式运行脚本。但是,scp 失败,退出状态代码为 1。

什么可能导致这种行为?

[更新]

使用 scp -v(或 scp -vv)报告更多信息。我还可以看到它提供了正确的密钥,并且身份验证按预期工作。现在我还注意到它在一些 OSX 机器上工作,但不是全部。

4

1 回答 1

0

我验证了 .ssh/known_hosts 和 .ssh/authorized_keys 都适用于管理员,但不适用于 root。出于某种原因,当 python 脚本在 crontab 下运行时,检查的 .ssh/known_hosts 是 root known_hosts 而不是管理员用户 known_hosts。所以这个挑战是在 scp 命令期间提出的,因为它不是 tty,它只是检查了 root known_hosts 文件,没有找到远程主机并且失败了。将所有 OSX 远程主机添加到 known_hosts 文件后,它运行顺利。

我认为另一种(更安全)的解决方案可能是在管理员用户下安装一个单独的 crontab,但我所做的只是更快。

于 2013-02-05T20:34:40.673 回答