如何通过带有一组私钥的跳转主机在远程主机上执行Ansible命令

如何通过带有一组私钥的跳转主机在远程主机上执行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

我有两个主人。我只能使用另一个作为jumphost ssh连接到其中一个。我需要创建一个剧本,使我能够通过jumphost执行命令

我试着按照他的指示去做,但没有成功。我假设有问题,因为它没有提到私钥,我需要使用它们来访问这些主机(这些主机在Openstack上)

这就是我的清单的样子:

[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命令中以启用隧道

你好,卡罗琳娜·奥尔舍夫斯卡,欢迎来到SO。您是否尝试过创建一个
ssh\u config
,以避开所有的命令行狂热?换句话说,首先,让它工作起来,然后使用一个
委托给:localhost
写出一个临时文件,并将其提供给所有
ssh
调用,这实际上是一个完整的答案。非常感谢你!