通过堡垒机代理SSH运行Ansible(译)

有一种常见的网络安全模式是阻止私有网络外部对应用服务器的所有连接(指除了业务数据外其它的连接,如后台管理系统和内部业务系统。译者注),然后使用 DMZ 区域中的 堡垒机 来选择性的将到服务器的流量加入白名单。

我们有这样的一个服务器池,只允许来自特定 IP 地址的 SSH 流量。这些服务器还由 Ansible 通过 SSH 方式程序化的来管理。

堡垒机方式导致 Ansible 不能直接与应用服务器通讯,因此需要找到通过堡垒机代理 SSH 连接的方法。

我喜欢用 Ansible 创建简单任务来运行,比如清空 memcache 以消除缓存。运行这个例子,以下是 Ansible 结构:

devops/
    ansible/
        roles/
            memcache/
                tasks/
                    main.yml
                    restart.yml
        tasks/
            restart-memcache.yml
        vars/
            production-memcache.yml
    bin/
        restart-production-memcache.sh
    hosts.ini
    ssh.config
    ansible.cfg

脚本 tasks/restart-production-memcache.sh 如下:

#!/bin/sh
ssh-add ${DEPLOY_KEYS_DIR}/memcache-servers.pem

ansible-playbook -i ansible/hosts.ini -u ansible ansible/tasks/restart-memcache.yml -v

从 devops 根目录执行,首先将服务器的 SSH key 添加到 SSH 客户端代理,然后执行 restart-memcache.ymlplaybook ,这包含了 memcache 角色的 restart.yml playbook (以及执行其它任务)。

ssh.config 文件中有以下 SSH 配置:

Host bastion
    User                   ec2-user
    HostName               ###.###.###.###
    ProxyCommand           none
    IdentityFile           /path/to/ssh/key.pem
    BatchMode              yes
    PasswordAuthentication no

Host *
    ServerAliveInterval    60
    TCPKeepAlive           yes
    ProxyCommand           ssh -q -A ec2-user@###.###.###.### nc %h %p
    ControlMaster          auto
    ControlPath            ~/.ssh/mux-%r@%h:%p
    ControlPersist         8h
    User                   ansible
    IdentityFile           /path/to/ssh/key.pem

首先声明用于连接到堡垒机的配置。紧接着是一个包含所有主机的总配置,在 ProxyCommand 中指明首先连接到堡垒机,然后使用 netcat (`nc) 来传递 Ansible 命令到应用服务器。

在 devops 文件夹中运行 ssh bastion -F ssh.config 即可连接到堡垒机。

接下来 Ansible 在连接应用服务器时,需要被告知使用这个自定义的 SSH 配置。

ansible.cfg 文件中有如下配置:

[ssh_connection]
ssh_args = -o ControlPersist=15m -F ssh.config -q
scp_if_ssh = True
control_path = ~/.ssh/mux-%%r@%%h:%%p

当 Ansible 在 devops 中执行时,能自动选择 ansible.cfg 并在运行 playbooks 时使用定义的配置项。

这种设置方法的一个问题是它运行时的 Ansible 的输出非常冗长,因为通过堡垒机连接到应用服务器时,包含了 SSH 调试连接信息;暂未找到好的办法来跳过这些信息。


译者:Liu Lantao : http://blog.liulantao.com

来源: Using Ansible with a bastion SSH host by Alex Bilbie

原创文章,作者:追马,如若转载,请注明出处:http://www.178linux.com/485

(0)
上一篇 2015-02-14 10:35
下一篇 2015-02-15 15:32

相关推荐

  • LA LN MP

    L A/N MP 安装 添加epel源 yum install epel* 安装所需环境 yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zl…

    Linux干货 2016-05-28
  • Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

    之前的句子 烟锁池塘柳 炮镇海城楼 因荷而得藕 有杏不需梅 认识于小林寒风的一篇小说《凤山遗梦》 grep grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。模式:由正则表达式字符及文本字符所编写的过滤条件 用法: grep [OPTIO…

    2017-08-03
  • 马哥教育网络21期+第十三周练习博客

        马哥教育网络21期+第十三周练习博客 1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 在服务器上安装samba ]# yum install samba 创建共享目录/data 启动samba的nmb和smb…

    Linux干货 2016-10-31
  • 小东北Eric的学习宣言

      大家好,我是网络班24期新加入的学员,之前工作了几年,一直没有找到一个很明确的工作方向,现在终于可以有一个很明确的努力方向啦,那就是跟着马哥,成为技术大牛,听马哥说过,键盘敲烂,月薪两万,为了这个目标,并且努力超越它,加油!冲!冲!冲!

    Linux干货 2016-10-19
  • 第一周:Linux基础及哲学思想

    1.现代计算机的组成及功能    现代计算机由运算器、控制器、存储器、输入和输出设备5大部分组成。分别担当着计算机的计算,控制,存储,输入和输出等功能. 2.Linux的发行版及其之间的联系与区别     Linux发行版主要分支分为三大系列: Slackware、debian 、redhat  &…

    Linux干货 2016-06-23
  • 马哥教育网络班21期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# fdisk /dev/sda WARNING: DOS-compatible mode is&n…

    Linux干货 2016-08-24