美文网首页devops:改变思维,让一切更加高效
ssh代理方法以及ansible代理方法

ssh代理方法以及ansible代理方法

作者: 潘晓华Michael | 来源:发表于2019-05-23 16:22 被阅读1次

    原文地址: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了。

    说明:

    • 如果私钥各不一样,可以通过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'
    

    相关文章

      网友评论

        本文标题:ssh代理方法以及ansible代理方法

        本文链接:https://www.haomeiwen.com/subject/xfdbzqtx.html