如何通过带有一组私钥的跳转主机在远程主机上执行Ansible命令
我有两个主人。我只能使用另一个作为jumphost ssh连接到其中一个。我需要创建一个剧本,使我能够通过jumphost执行命令 我试着按照他的指示去做,但没有成功。我假设有问题,因为它没有提到私钥,我需要使用它们来访问这些主机(这些主机在Openstack上) 这就是我的清单的样子:如何通过带有一组私钥的跳转主机在远程主机上执行Ansible命令,ansible,ansible-inventory,Ansible,Ansible Inventory,我有两个主人。我只能使用另一个作为jumphost ssh连接到其中一个。我需要创建一个剧本,使我能够通过jumphost执行命令 我试着按照他的指示去做,但没有成功。我假设有问题,因为它没有提到私钥,我需要使用它们来访问这些主机(这些主机在Openstack上) 这就是我的清单的样子: [app_hosts] app ansible_host=192.168.0.4 ansible_user=ubuntu ansible_ssh_private_key_file=app-key.pem a
[app_hosts]
app ansible_host=192.168.0.4 ansible_user=ubuntu
ansible_ssh_private_key_file=app-key.pem
ansible_python_interpreter=/usr/bin/python3
[db_hosts]
db ansible_host=192.168.0.3 ansible_user=ubuntu
ansible_ssh_private_key_file=db-key.pem
[db_hosts:vars]
ansible_ssh_common_args='ssh -o ProxyCommand="ssh -W %h:%p
ubuntu@192.168.0.4 -i app-key.pem" ubuntu@192.168.0.3 -i db-key.pem'
可悲的是,我得到了:
TASK [Gathering Facts]
*********************************************************
fatal: [db]: UNREACHABLE! => {"changed": false, "msg": "Failed to
connect to the host via ssh: channel 0: open failed: connect failed: strong text
Temporary failure in name resolution\r\nstdio forwarding
failed\r\nssh_exchange_identification: Connection closed by remote
host\r\n", "unreachable": true}
这可能不是完整的答案,但“ansible\u ssh\u common\u args”的定义似乎有些混乱。试试这个,看看它是否能让你更进一步:
[db_hosts:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -i app-key.pem -W %h:%p ubuntu@192.168.0.4"'
变化:
- “ansible_ssh_common_args”定义了要添加到ansible将使用的ssh命令中的其他参数,因此前面不应该有
ssh
- 移动-我在前面的user@host定义,严格来说user@host应该是命令的最后一个组件
- 删除'ubuntu@192.168.0.3-i db key.pem'完全正确。这不应该是必需的,因为在“ansible\u ssh\u common\u args”中,您只是定义一个主机来有效地通过隧道连接。因此Ansible将尝试连接到DB主机,但将“Ansible\u ssh\u common\u args”的内容添加到它构建的ssh命令中以启用隧道
ssh\u config
,以避开所有的命令行狂热?换句话说,首先,让它工作起来,然后使用一个委托给:localhost
写出一个临时文件,并将其提供给所有ssh
调用,这实际上是一个完整的答案。非常感谢你!