问题描述
在Vagrant中有一个多机设置,包括3台应用服务器和1台Ansible控制主机。他希望能够在Ansible控制主机上运行ansible-playbook命令,但遇到了SSH连接问题,导致连接失败。用户希望在运行vagrant up
之后,Ansible控制主机能够无需密码或额外的手动步骤即可连接到其他虚拟机。
解决方案
请注意以下操作可能会因版本差异而有所不同,执行前务必做好备份。
最佳解决方案
用户在Vagrantfile中的每个主机上生成SSH密钥对,然后将公钥分发到其他主机的authorized_keys
文件中。这将允许主机之间使用SSH密钥进行连接,而无需密码。
以下是步骤:
- 在Vagrantfile所在的项目目录下打开终端。
执行以下命令以为每个主机生成SSH密钥对:
bash
ssh-keygen -t rsa -N "" -f <主机名>_rsa
将<主机名>
替换为实际的主机名称,比如oracle-vm
或ansible-vm
。在Vagrantfile中添加以下配置,以将公钥复制到各个主机的
authorized_keys
文件中:
ruby
# 为ansible主机复制公钥
config.vm.provision "file", source: "<主机名>_rsa.pub", destination: "/home/vagrant/.ssh/authorized_keys"
将<主机名>
替换为每个主机的名称。最后,执行以下命令以启动虚拟机:
bash
vagrant up
通过执行以上步骤,您将为每个主机生成了SSH密钥对,并在Ansible控制主机上配置了其他主机的公钥,从而实现了主机之间的无密码连接。
其他解决方案
上述解决方案是最简单且常见的方法,但也有其他方法可以实现类似的目标。以下是其中一种方法:
- 在Vagrantfile中为每个主机生成SSH密钥对。
- 将Ansible主机的公钥分发到其他主机的
authorized_keys
文件中,可以使用Vagrant的config.vm.provision "file"
配置。 - 使用Vagrant的shell provisioner在其他主机上添加SSH密钥对。
然而,根据您的需求和安全性要求,选择适合您情况的解决方案。
请注意,由于Vagrant、操作系统版本以及其他因素可能会导致操作步骤略有不同,请在执行操作之前确保备份您的数据。
总结
通过生成SSH密钥对并将公钥分发到各个主机的authorized_keys
文件中,您可以在Vagrant多机设置中实现主机之间的无密码连接。这将提高开发和测试过程的便利性,同时也可以根据安全性要求进行适当的配置。
请确保在执行操作之前理解您的环境和需求,并谨慎操作。