我正在使用ansible来自动执行某些任务。其中一个要求我ssh到服务器A,然后从A到B再从B到B.然后我似乎无法找到任何方法来获得这样做。有什么建议吗?
答案 0 :(得分:14)
鉴于您没有将Paramiko用于ssh(transport = ssh
),Ansible将完全使用您的~/.ssh/config
。因此,您可以在ssh配置中全局定义所有连接规则。
如果由于某种原因您希望Ansible不使用您的默认ssh配置但提供单独的配置,您可以在ansible.cfg
中定义:
[ssh_connection]
ssh_args= -F "/path/to/ssh/config/specifically/for/ansible"
在您的ssh配置中,然后设置连接规则。坚持你的榜样:
Host HostA
HostName real-host-name-A.com
Host HostB
HostName real-host-name-B.com
ProxyCommand ssh -q HostA nc %h %p
Host HostC
HostName real-host-name-C.com
ProxyCommand ssh -q HostB nc %h %p
答案 1 :(得分:4)
对于Ansible 2.0及更高版本,您可以执行以下操作:
步骤1:编辑hosts
文件并为目标主机添加一行:
my-target-host ansible_host=10.10.105.23 ansible_ssh_private_key_file=~/.ssh/private_key ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q my-jump-node"'
注意使用ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q my-jump-node"'
来处理通过跳转节点进行的代理。
步骤2:在~/.ssh/config
文件中定义您的my-jump-node
:
Host my-jump-node
Hostname <IP_ADDRESS>
User ubuntu
Port 22
IdentityFile /root/.ssh/nhc-moho/id_rsa # <<< Local path of private key
ControlMaster auto
ControlPath /tmp/ansible-%r@%h:%p
ControlPersist 5m
步骤3:请注意,在上面的步骤1中,我们有ansible_ssh_private_key_file=~/.ssh/private_key
。这是存储在my-jump-node
上的private_key,它对应的公共密钥存储在my-target-host
上。
这里要记住的重要事情是:
您必须将此私钥从my-jump-node机器复制到您在本地运行的本地机器上,否则将无法连接到my-target-host
第4步:对其进行测试。
ansible my-target-host -m shell -a "echo 'TESTING'"