当我以普通用户身份运行以下命令时,一切正常:
fabio@myclient:~$ rsync -rv myserver:~/backup /home/fabio/backup/
它无需任何用户交互即可工作,但我需要在以 root 身份执行的脚本中运行,所以我尝试了:
root@myclient:~# sudo -u fabio rsync -rv myserver:~/backup /home/fabio/backup/
并且还尝试过:
root@myclient:~# su - fabio -c "rsync -rv myserver:~/backup /home/fabio/backup"
两者都有效,但要求我输入“密钥密码”,我可以避免吗?
答案1
“密钥密码”可能来自 SSH notrsync
或sudo
,它要求输入密码来解锁您的 SSH 私钥。
由于我确实不建议您使用没有密码的密钥,因此请考虑脚本以 root 身份运行的情况。在您登录后,脚本是否总是以 root 身份运行?您可以在登录后输入一次密码吗?
如果是这种情况,我建议使用类似的东西keychain
确保脚本在以 root 身份运行时使用以您的用户身份启动的 ssh-agent。您可以进行设置,这样您只需在登录后输入一次密码,并且以后的任何调用都不需要交互。
如果不是这种情况,如果脚本必须自主运行而无需您进行任何交互式身份验证,请考虑专门为备份脚本生成密钥对,然后限制它可以执行的操作,方法是让它以远程另一个用户的身份进行身份验证end (即不是fabio
,而是例如),或者使用远程端文件中的参数fabio-backup
来限制它(尽管这有点复杂,因为它需要查看环境变量;请参阅command=
.authorized_keys
SSH_ORIGINAL_COMMAND
授权密钥(5)详情)
答案2
您的 ssh 私钥受密码保护。当您以(登录)用户身份手动运行它时,它使用 ssh 代理,您曾经在其中存储过密码密钥库。
然而,当无人值守运行时,这种情况不会发生——毕竟,用户甚至可能没有登录(因此其密钥库不可用)。为了让它始终工作,您需要从 ssh 私钥中删除密码(通过以ssh-keygen -p
用户身份登录时fabio
- 只需按 Enter 键获取新密码,它就会被删除)。
次要安全说明:当私钥不受密码保护时,任何获得fabio
帐户访问权限的人都可以通过 ssh 连接到允许该密钥的其他主机,而无需首先从用户处嗅探密码)