rc.local 上无密码 SSH 登录无效

rc.local 上无密码 SSH 登录无效

我创建了一个如下的 bash 脚本并将其保存为/usr/bin/db.sync.sh

#!/bin/bash

rsync -ar --delete /files/database_backups [email protected]:/users/slyme/Documents/server_backups

我已经生成了必要的一对身份验证密钥,使其工作而无需输入密码。

当我直接运行该命令时,它起作用了(欢呼!)。

我已将以下内容添加到“/etc/rc.local”:

/usr/bin/db.sync.sh >>/files/database_backups/db-sync.log.txt 2>&1

当我重新启动机器时,此脚本失败,日志文件显示该过程要求输入密码,当然,它没有得到密码,所以它失败了。如果我/etc/rc.local从命令行运行,那么果然,系统会要求我输入密码,当我输入密码时,脚本就可以正常工作。

有人知道为什么脚本从 rc.local 运行时需要密码,即使直接运行时不需要密码吗?

答案1

脚本 /etc/rc.local 以 root 身份运行。请确保您拥有正确的用户私钥[电子邮件保护]安装在 /root/.ssh/ 中(而不仅仅是在用户的 $HOME/.ssh 中)

或者,为了确保使用正确的私钥,您可以在 rsync 命令行上指定它:

rsync -e "ssh -i /path/to/ssh_key" ...

希望这可以帮助。

答案2

如果您想使用,/etc/rc.local您应该以您的用户身份运行该脚本:

su -l myuser -c /path/to/the/script

否则,您可以使用@startup系统选项cron;这样,作业就可以以您的用户身份安全地执行,而您无需编辑系统文件。例如https://unix.stackexchange.com/questions/57852/crontab-job-start-1-min-after-reboot

相关内容