【问题标题】:Referencing a Private SSH Key between two machines在两台机器之间引用私有 SSH 密钥
【发布时间】:2019-09-20 21:41:42
【问题描述】:

我是服务器管理的新手,我正在查看是否有人可以提供帮助。非常感谢任何建议。

我在使用 Ansible 设置 Centos7 服务器时遇到了这个问题。在我的 ansible.cfg 文件中(服务器上的 /etc/ansible/ ),私钥需要引用( private_key_file=/path/to/file )。我假设这就是为什么我在尝试 ping 所有主机时得到“权限被拒绝”的原因。

我想知道如何引用我用来从我的机器连接到服务器的私钥。如果这甚至是“权限被拒绝”的原因。我的机器上有我的私钥和公钥,公钥内容复制到服务器的 .ssh/authorized_keys 文件中。

我的 Macbook 上的文件共享已关闭我认为 ssh 不需要这样做,因为我可以连接到服务器。

Ansible 尝试与我的用户名建立连接(不是没有)

我使用的代码: ansible -m ping all -vvv

host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true } host2 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true }

【问题讨论】:

  • Stack Overflow 用于编程问题,而不是关于使用或配置 Unix 及其实用程序的问题。 Unix & LinuxServer Fault 将是解决此类问题的更好地方。
  • 如果您可以发布用于获取帖子中描述的此输出的命令,那就太好了。
  • @PatrickPötz 抱歉,这很重要。

标签: linux ansible centos centos7


【解决方案1】:

该消息表明很可能没有提供 ssh-key。 检查 Ansible 是否真的使用了您用于配置的 ansible.cfg 文件:

$ ansible --version
ansible-config 2.7.8
  config file = None
  configured module search path = [u'/home/ec2-user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.16 (default, Jul 19 2019, 22:59:28) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

您也可以直接在ansible 命令中附加密钥文件,如下所示:

ansible -m ping hosts --private-key=~/.ssh/keys/id_rsa -u <desiredUsername>

参考https://ansible-tips-and-tricks.readthedocs.io/en/latest/ansible/commands/#running-ansible-as-a-different-user

还有可能是您使用了错误的私钥。您必须使用目标机器的私钥。 要创建密钥对,请在此处查看此示例:

https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

【讨论】:

  • 谢谢。我试图从我的用户运行 ansible,但我没有 root 权限。