通過堡壘機代理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.www58058.com/485

(0)
追馬追馬
上一篇 2015-02-14
下一篇 2015-02-15

相關推薦

  • 是否

    是否

    Linux干貨 2016-08-22
  • N22-第六周作業

    vim小小的總結 (本總結摘自馬哥網絡班22期課堂筆記) vim是一款交互式的全屏編輯器,是vi的升級版,在vi上增強了很多,如:多級撤銷,多窗口和多緩沖區,語法高亮,在線幫助等。 vim也是一種模式化的編輯器。分別是編輯模式也叫命令模式,輸入模式,末行模式。其中使用vim打開文件后默認的是編輯模式。 三種模式之間的轉換: 編輯模式—>輸入模式 &…

    Linux干貨 2016-11-21
  • 文件壓縮和軟件包管理

    Linux壓縮打包 壓縮是一種通過特定的算法來減小計算機文件大小的機制。有利于文件在網絡上的傳輸,節約帶寬。在Linux中,壓縮是以后綴名區分文件的。(Linux中很少見)壓縮文件都會呈現醒目的紅色。 注意!以下壓縮軟件只能壓縮文件而不能壓縮目錄。不能對目錄直接壓縮! compress命令 compress這個命令是非常老舊的一款命令,現在基本已經不用了 而…

    Linux干貨 2016-08-24
  • 我們都在前行的路上

    我們都在前行的路上         從0到1是一種突破,年少輕狂到心有余而力不足,力挽狂瀾到恬淡人生需伏地腳踏實地地前行,漂泊在一線都市,立足我圖網,途徑百勝,一次機緣巧合轉戰阿里,對于一個工作6年的弄潮兒,他將所有經歷的化作前行的動力和堅韌不拔的耐力,也許不經意,但卻理所當然,…

    Linux干貨 2016-11-03
  • 第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;   (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdis…

    Linux干貨 2017-07-04
  • sed用戶小結

    sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法sed命令行格式為:         sed [-nefri] ‘command’ 輸入文本  …

    Linux干貨 2016-08-12
欧美性久久久久