K G*_*K G 12 ansible ansible-playbook
我正在使用ansible来自动执行某些任务.其中一个要求我ssh到服务器A,然后从A到B再从B到B.然后我似乎无法找到任何方法来获得这样做.有什么建议?
udo*_*dan 16
鉴于你没有使用transport = sshParamiko for ssh(),Ansible将完全使用你的~/.ssh/config.因此,您可以在ssh配置中全局定义所有连接规则.
如果由于某种原因您希望Ansible不使用您的默认ssh配置但提供单独的配置,您可以在以下内容中定义ansible.cfg:
[ssh_connection]
ssh_args= -F "/path/to/ssh/config/specifically/for/ansible"
Run Code Online (Sandbox Code Playgroud)
在您的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
Run Code Online (Sandbox Code Playgroud)
对于 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"'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
步骤#3:注意在上面的步骤#1 中我们有ansible_ssh_private_key_file=~/.ssh/private_key. 这是存储在 的 private_key my-jump-node,其相应的公钥存储在my-target-host。
这里要记住的重要一点是:
您必须将此私钥从 my-jump-node 机器复制到运行 ANSIBLE 的本地机器,否则它将无法连接到 my-target-host
步骤#4:测试它。
ansible my-target-host -m shell -a "echo 'TESTING'"
Run Code Online (Sandbox Code Playgroud)