使用ansible SSH到远程服务器

时间:2014-12-26 20:02:31

标签: ansible ansible-playbook

我正在使用ansible来自动执行某些任务。其中一个要求我ssh到服务器A,然后从A到B再从B到B.然后我似乎无法找到任何方法来获得这样做。有什么建议吗?

2 个答案:

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

答案 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'"