devops:改变思维,让一切更加高效

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设置

  1. 使用这种跳转方式,必须将settings->JOBS->ENABLE JOB ISOLATION设置为OFF状态
  2. 在Credentials中添加访问的私钥
  3. Inventories中添加Jumper server Host
  4. Inventories中添加要访问的Host,并添加ssh访问参数
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -p 22 -q 100.129.71.4'
  1. 通过这些设置后,ansible就可以像访问普通主机一样访问目的Host了。

说明:

ansible_ssh_private_key_file: key
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -p 22 -q 100.129.71.4'
上一篇下一篇

猜你喜欢

热点阅读