bash – 为什么ssh从crontab失败,但是从命令行执行时会成功?

前端之家收集整理的这篇文章主要介绍了bash – 为什么ssh从crontab失败,但是从命令行执行时会成功?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个bash脚本,用于执行ssh到远程机器,并在那里执行一个命令,如:
ssh -nxv user@remotehost echo "hello world"

当我从命令行执行命令它工作正常,但是作为crontab的一部分执行时失败(errorcode = 255 – 无法建立SSH连接).细节:

...
Waiting for server public key.
Received server public key and host key.
Host 'remotehost' is known and matches the XXX host key.
...
Remote: Your host key cannot be verified: unknown or invalid host key.
Server refused our host key.
Trying XXX authentication with key '...'
Server refused our key.
...

在本地执行时,我作为一个根,crontab也以root身份工作.
从crontab和命令行执行’id’提供完全相同的结果:

$id
> uid=0(root) gid=0(root) groups=0(root),...

我从一些本地机器到运行crond的机器上执行ssh.我有ssh密钥和凭据到ssh,以克隆机器和脚本连接到的任何其他机器.

PS.请不要询问/抱怨/评论执行任何东西作为root是坏/错误/等 – 这不是这个问题的目的.

我猜,通常当你从本地机器到运行crond的机器ssh时,你的私钥被加载到ssh代理并通过连接转发.因此,当您从命令行执行命令时,它将在ssh-agent中找到您的私钥,并使用该密钥登录到远程计算机.

当crond执行命令时,它不能访问ssh-agent,所以不能使用你的私钥.

您将必须在运行crond的计算机上为root创建一个新的私钥,并将其公共部分复制到希望crond登录到的远程计算机上的相应authorized_keys文件.

猜你在找的Bash相关文章