ssh代理方法以及ansible代理方法
2019-05-23 本文已影响1人
潘晓华Michael
原文地址:http://wooooe.com/2018/07/31/remote_forwarding/
ssh端口映射例子
因为公司的网络比较深所以经常需要跳转多次。所以这次做个记录
服务器结构需求: 需要从your host跳到client中间隔了两层跳板机。
如果单纯用代理方法只能跳一层
所以如果用端口映射+代理方式就可以跳两层了
映射命令
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端口。
映射完成之后。执行
ssh -p 44010 jump_host2_username@127.0.0.1
就可以直接跳转到jump_host2上
ssh走代理方法
第一种:
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文件
Host 192.122.150.*
Port 22
User anyone
ProxyCommand ssh -p 3391 jump_host1_username@222.222.222.222 -W %h:%p
意思就是当你在当前这个用户进行ssh连接时凡是匹配到192.122.150的ip都会使用222.222.222.222的3391端口作代理.
ansible使用代理的方法
当你用playbook时可以直接写在hosts文件做全局变量
[web]
172.16.3.14 ansible_ssh_user=aaaa
[web:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -p 3391 -q jump_host1_username@222.222.222.222"'
如果你想直接附加在命令行中,那么可以这么写
--ssh-common-args='-o ProxyCommand="ssh -W %h:%p -p 3391 -q jump_host2_username@222.222.222.222"'
如果你想调用ansible api走代理,那么可以这么写
Options = namedtuple('Options',
['connection',
'remote_user',
'ask_sudo_pass',
'verbosity',
'ack_pass',
'module_path',
'forks',
'become',
'become_method',
'become_user',
'ssh_common_args',
'check',
'listhosts',
'listtasks',
'listtags',
'syntax',
'sudo_user',
'sudo',
'diff'])
options = Options(connection='smart',
remote_user=None,
ack_pass=None,
sudo_user=None,
forks=5,
sudo=None,
ask_sudo_pass=False,
verbosity=5,
module_path=None,
become=None,
become_method=None,
become_user=None,
ssh_common_args=sshCommonArgs,
check=False,
diff=False,
listhosts=None,
listtasks=None,
listtags=None,
syntax=None)
你需要把参数传给sshCommonArgs,例如
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访问参数
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -p 22 -q 100.129.71.4'
- 通过这些设置后,ansible就可以像访问普通主机一样访问目的Host了。
说明:
- 如果私钥各不一样,可以通过HOST的参数设置,其中key放在ansible tower部署机器的某个目录下。
ansible_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