ansible通过跳板机管理另一个网络下的主机集群
原文地址:http://wooooe.com/2018/07/31/remote_forwarding/
ssh端口映射例子
因为公司的网络比较深所以经常需要跳转多次。所以这次做个记录
需求: 需要从your host跳到client中间隔了两层跳板机。
如果单纯用代理方法只能跳一层
所以如果用端口映射+代理方式就可以跳两层了
映射命令
1 | ssh -g -f -NL 127.0.0.1:44010:172.16.3.14:22 -p 3391 jump_host1_username@222.222.222.222 |
意思就是将172.16.3.14的22端口映射到127.0.0.1的44010端口,222.222.222.222是中间的代理机,3391是222.222.222.222的ssh端口。
映射完成之后。执行
1 | ssh -p 44010 jump_host2_username@127.0.0.1 |
就可以直接跳转到jump_host2上
ssh走代理方法
第一种:
1 | ssh -o ProxyCommand="ssh -W %h:%p -p 3391 -q jump_host1_username@222.222.222.222" jump_host2_username@172.16.3.14 |
第二种:
需要在你当前用户目录下的.ssh目录下建一个config文件
1 | Host 192.122.150.* |
意思就是当你在当前这个用户进行ssh连接时凡是匹配到192.122.150的ip都会使用222.222.222.222的3391端口作代理.
ansible使用代理的方法
当你用playbook时可以直接写在hosts文件做全局变量
1 | [web] |
如果你想直接附加在命令行中,那么可以这么写
1 | --ssh-common-args='-o ProxyCommand="ssh -W %h:%p -p 3391 -q jump_host2_username@222.222.222.222"' |
如果你想调用ansible api走代理,那么可以这么写
1 | Options = namedtuple('Options', |
你需要把参数传给sshCommonArgs,例如
1 | ssh_common_args='-o ProxyCommand="ssh -W %h:%p -p 3391 jump_host1_username@222.222.222.222' |
ansible tower设置
- 使用这种跳转方式,必须将
settings
->JOBS
->ENABLE JOB ISOLATION
设置为OFF
状态 - 在Credentials中添加访问的私钥
- Inventories中添加Jumper server Host
- Inventories中添加要访问的Host,并添加ssh访问参数
1
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -p 22 -q 100.129.71.4'
- 通过这些设置后,ansible就可以像访问普通主机一样访问目的Host了。
说明:
- 如果私钥各不一样,可以通过HOST的参数设置,其中key放在ansible tower部署机器的某个目录下。
1
2ansible_ssh_private_key_file: key
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -p 22 -q 100.129.71.4' - ansible tower还有一种方式:Isolated Nodes
它的方式与zabbix proxy的方式有点像,可参考如下资料
https://www.ansible.com/blog/ansible-tower-feature-spotlight-instance-groups-and-isolated-nodes
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论