请注意:虽然这个问题具体是关于如何在 Ansible 中进行SSH配置,但我觉得任何Linux / SSH专家都会理解Ansible文档是什么到达并且应该能够为我回答这个问题。
我有三个用于实验性Ansible设置的虚拟机:
ansible01
- 我刚刚安装了Ansible 1.9.2 db01
- 一台Ubuntu机器,我最终将运行一个MySQL实例mq01
- 我最终将运行RabbitMQ实例的Ubuntu机器然后我进入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密钥,以及我需要运行哪些完全命令(以及在哪些服务器上)以便ansible all -m ping
将ping我的db01
和mq01
计算机?
当我通过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
答案 0 :(得分:2)
您应该为用户的.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
答案 1 :(得分:0)
你是对的,文档不是很清楚,你的问题确实是一个SSH问题,而不是一个问题。要将SSH与基于密钥的登录一起使用,您需要生成密钥对,并将公钥复制到要访问的每台计算机上的authorized_keys文件中。如果您的私钥有密码,则每次使用SSH时都需要输入密钥,或者使用ssh-agent按照您的描述在当前会话中保存私钥密码。
您还需要在要连接的每台计算机上设置known_hosts文件,否则ansible将无法连接。有很多关于此的写作,寻找“基于密钥的ssh登录”。在尝试使用ansible之前,您需要能够使用基于密钥或基于证书的登录通过SSH进行连接。一旦你有了工作,再试一次ansible。