使用ansible SSH到远程服务器

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)
  • 与A的连接是直接的
  • 与B的连接通过A.
  • 与C的连接经过B,经过A


Bas*_*usa 5

对于 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)