【问题标题】:Configuring SSH in Ansible在 Ansible 中配置 SSH
【发布时间】:2015-11-11 21:49:18
【问题描述】:

请注意:虽然这个问题是关于如何在 Ansible 中进行 SSH 配置,但我感觉任何 Linux/SSH 专家都会理解 Ansible 文档是什么了解并应该能够为我回答这个问题。

我有三个虚拟机用于实验性 Ansible 设置:

  • ansible01 - 我刚刚安装了 Ansible 1.9.2 的 Ubuntu 机器
  • db01 - 一台 Ubuntu 机器,我最终将在其中运行 MySQL 实例
  • mq01 - 一台 Ubuntu 机器,我最终将在其中运行 RabbitMQ 实例

然后我进入ansible01:/etc/ansible/hosts 并给它以下静态配置:

[databases]
db01.example.org

[brokers]
mq01.example.org

我现在在他们的文档中they discuss SSH keys 的部分,我不完全理解我需要做什么。

它说要运行:

ssh-agent bash
ssh-add ~/.ssh/id_rsa

然后尝试通过ansible all -m ping ping 所有节点。然而,文档并没有说 在哪里我应该执行那些 SSH 命令,我觉得除了这些之外还有更多的东西。

所以我问:我应该在哪里创建 SSH 密钥,以及我需要运行哪些 exact 命令(以及在哪些服务器上),以便ansible all -m ping 能够 ping 两者我的db01mq01 机器?


更新

当我 SSH 到 ansible01 并运行这些 SSH 命令时,输出如下:

myuser@ansible01:~$ ssh-agent bash
myuser@ansible01:~$ ssh-add ~/.ssh/id_rsa
/home/myuser/.ssh/id_rsa: No such file or directory

【问题讨论】:

  • 似乎您需要创建密钥对。您可以使用以下命令执行此操作: ssh-keygen -t rsa -b 4096 来源:help.github.com/articles/generating-ssh-keys 当您创建该密钥时,您将得到 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub cat将 ~/.ssh/id_rsa.pub 和 SSH 分别连接到每台机器,并创建一个名为 ~/.ssh/authorized_keys 的文件并将公钥的输出粘贴到其中。那个时候你应该是金色的。 :)

标签: ubuntu ssh ansible ssh-keys


【解决方案1】:

您应该为用户的 .ssh 目录创建 SSH 密钥,该目录通常位于:

~/.ssh/

这意味着你应该在 ansible01 上有以下文件:

~/.ssh/id_rsa

您需要在 ansible01 机器上运行命令:

ssh-add ~/.ssh/id_rsa

上面的命令设置它,以便您的 SSH 在启动 SSH 会话时自动查找使用私钥 id_rsa(这是 Ansible 默认运行的)。您可以将该命令添加到您的 .bash_profile 中,以便在每次启动新的 bash 会话时自动运行。

要使用 Ansible ping 所有主机清单中定义的机器,您需要运行以下命令:

ansible all -m ping

关于您应该在哪台机器上运行 ping 命令的问题?这将是您安装 Ansible 的机器 - 在您的情况下 ansible01

【讨论】:

  • 感谢@user2321289 (+1) 但是我仍然没有从这里的树林中看到森林。如果我理解正确(如果我仍然误解,请澄清!),你是说我在 ansible01 上运行 ssh-agent bash; ssh-add ~/.ssh/id_rsa,这将使我能够运行 ansible all -m ping,这应该 ping 我的 @ 987654328@ 和 mq01 服务器,是?!?! 如果是,这怎么可能?...
  • 除非我将db01mq01 配置为接受来自ansible01 的SSH 连接,否则Ansible 怎么能成功连接到这些机器,尤其是当ping 命令没有提到用户名/密码/等等?
  • 换句话说,如果不对db01mq01 执行某事,我看不到Ansible 如何连接到它们。如果我在笔记本电脑上ssh-add ~/.ssh/id_rsa 然后尝试通过 SSH 连接到某个公司的 linux 服务器,我将无法访问(除非我的笔记本电脑上有正确的 SSH 密钥,并且与该服务器,或者如果我指定了用户名/密码,例如ssh someuser@somesecretmachine 等)。
  • 在这种情况下将 ~/.ssh/id_rsa 视为您的凭据。在最现实的设置中,您不会使用用户名/密码通过 SSH 连接到机器,而是使用 RSA 密钥对。您提到的机器 db01 和 mq01 应该都有一个名为 ~/.ssh/authorized_keys 的文件,其中包含您的 id_rsa.pub 的内容,或您的密钥对中的公钥。 id_rsa 解锁此公钥并允许 Ansible(或 SSH)在无需提供密码的情况下进行身份验证。这实际上比使用密码更安全。希望对您有所帮助。
  • 不过,从本质上讲,您必须做点什么。您需要将 ~/.ssh/id_rsa.pub 的内容添加到每台机器的 ~/.ssh/authorized_keys 中。这适用于您计划在每台机器上使用 Ansible 的用户。例如,如果您的用户是 ubuntu,那么在 /home/ubuntu/.ssh/authorized_keys 下,您将在该文件中拥有 id_rsa 的公钥。
【解决方案2】:

您是对的,文档不是很清楚,您的问题实际上是 SSH 问题而不是 ansible 问题。要将 SSH 与基于密钥的登录一起使用,您需要生成一个密钥对并将公钥复制到您要访问的每台计算机上的 authorized_keys 文件中。如果您的私钥有密码,则每次使用 SSH 或使用 ssh-agent 时都需要输入密码,以便在当前会话中保存私钥密码。

您还需要在要连接的每台机器上设置 known_hosts 文件,否则 ansible 将无法连接。有很多关于此的文章,请查找“基于密钥的 ssh 登录”。在尝试使用 ansible 之前,您需要能够使用基于密钥或基于证书的登录通过 SSH 进行连接。完成该工作后,再次尝试 ansible。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多