在 crontab 中通过 ssh -t 使用 -u 进行 sudo

在 crontab 中通过 ssh -t 使用 -u 进行 sudo

我正在尝试创建一个 cron 作业,使用 ssh 登录到远程服务器并以其他用户身份运行脚本。我尝试:

* * * * * source $HOME/.keychain/$HOST-sh && sudo -u $USER $PATH/$SCRIPT

但这不起作用,因为没有为 ssh 指定 -t 选项。cron 作业需要获取 keychain 文件才能在不使用密码的情况下工作,但我不知道在这种情况下在哪里包含 ssh 的 -t 选项。

答案1

您不需要钥匙链。

使用 ssh-keygen,创建新的密钥对。在目标服务器上部署公钥并在其前面加上如下命令

command="/bin/ls" ssh-dss YOURKEEEEEEEYHERE ==comment

在该远程主机上的 .ssh/authorized_keys 中

设置完成后,您将能够通过 ssh 在远程主机上无需密码运行该命令。

答案2

1)创建一个 ssh 密钥对“ssh-keygen -f /some/path/mykey”,并且不给它设置密码

2)将其复制到远程用户的authorized_keys文件“ssh-copy-id -i /some/path/mykey remoteuser@remotehost”

3)创建一个 cron 作业“echo '8 * * * * ssh -i /some/path/mykey remoteuser@remotehost /path/to/some/command' | crontab -”

4)最好编辑~remoteuser/.ssh/authorized_keys,使密钥以 command="/path/to/some/command" 作为前缀

如果您实际上想要以一个用户身份(例如 remoteuser1)登录远程主机,然后使用 sudo 以另一个用户身份(例如 remoteuser2)运行命令。您需要在远程主机上设置 sudo,以允许第一个用户以第二个用户身份运行命令而无需提供密码,如下所示 ins /etc/sudoers -

远程用户 1 ALL = (远程用户 2) NOPASSWD: /path/to/some/command

然后在本地主机上执行“ssh -i /some/path/mykey remoteuser@remotehost sudo /path/to/some/command”的 cron 作业

相关内容