通過堡壘機代理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 10:35
下一篇 2015-02-15 15:32

相關推薦

  • Linux三劍客之sed

    sed 簡介 sed 工作原理 命令格式 常用選項: 地址定界: 編輯命令: 替換標記: sed元字符集(正則表達式) 高級編輯命令: sed用法實例 作業: 選定行的范圍:,(逗號) 刪除操作:d命令 顯示模式空間內容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多點編輯:e命令 從文件讀入:r命令 寫入文件:w命令 替換操作:s命令 替…

    Linux干貨 2016-08-11
  • 自制Linux

    1. 分區出來兩個區 fdisk /dev/sdb     2. 創建文件系統   [root@localhost ~]# mkfs.ext4 /dev/sdb1  [root@localhost ~]# mkfs.ext4 /dev/sdb2 3.…

    Linux干貨 2016-09-16
  • nginx基本功能學習

    一、NGINX介紹: Nginx 是一個高性能的 Web 和反向代理服務器, 它具有有很多非常優越的特性:            作為 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的并發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 …

    Linux干貨 2015-12-19
  • 每天一個Linux命令

        程序管理:      程序的組成部分:二進制程序文件,庫文件,配置文件,幫助文件。                      二進制和庫文件可執行,庫文件不能獨立執行,只能被調用時執…

    Linux干貨 2017-04-08
  • CentOS6.7上編譯安裝php

    環境:CentOS6.7,minimal安裝。 前提條件:安裝了編譯環境,安裝了Apache/Nginx,安裝了MySQL/MariaDB。具體安裝見:http://www.www58058.com/16583    http://www.www58058.com/17497  1、解決依賴關系: 請配置好yum源(系統安裝源及…

    Linux干貨 2016-06-03
  • Linux簡單的磁盤分區、格式化和掛載

     一.分區: 1.查看分區fdisk -l 通過fdisk -l 查看機器所掛硬盤個數及分區情況   2.通過上面的信息,我們知道此機器中掛載兩個硬盤分別是:/dev/sda和/dev/sdb, 其中sda有兩個主分區/dev/sda1和sda2; 其中sdb有1個擴展類型/dev/sdb3和3個邏輯分區sd…

    Linux干貨 2016-02-28
欧美性久久久久