我不确定发生了什么,因此我也在这里询问,希望你们中的一些人能够知道。
我试图弄清楚为什么同样的一行代码能够成功连接到我的远程服务器
ansible-playbook initial.yml -u root -e 'host_key_checking=False'
但是如果我从 shell 脚本内部运行同样的一行代码,那么我将得到:
fatal: [*********]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: root@*************: Permission denied (publickey).\r\n", "unreachable": true}
我尝试过使用 sudo 和不使用 sudo。shell 脚本位于同一目录中。
有什么想法吗?
答案1
当您ansible-playbook
登录后运行时,ansible 可以使用与您的 ssh 密钥代理的连接,以便使用 ssh 密钥登录而无需输入密码或密码。
您没有指定如何运行包含命令的脚本,但通常将其放入脚本中的目的是为了能够轻松地从 调用它cron
。但是,来自 的运行时环境cron
没有连接到 ssh 密钥代理,因此登录到远程主机失败。
解决此问题的一种方法是使用不带密码的授权密钥,但您必须意识到安全隐患!任何获得该私钥的人都可以登录安装公钥的任何地方。缓解此问题的一种方法是使用带有公钥的强制命令,但这是另一个话题。