SSH ProxyCommand 實踐



在阿里上搭了典型的 Nginx + APP server 的架構:

Nginx APP server

即,只有 Nginx 服務器與公網鏈接。然后,每次部署升級服務器都要先 SSH 到 Nginx 再 SSH 到 server1 及 server2。問題來了,怎樣才能快速有效的管理服務器?

上 Puppet、Chef 這樣的配置管理工具?一個手掌能數過來的服務器沒必要啊,隨意 Version 0 誕生了。

Version 0

Ver0 總結起來就是基於 SSH 隧道的 Python 腳本,具體可以參見 簡易自動化部署服務器集群

在實際使用中發現,在 MAC OS 下每次通過隧道自動登錄 APP server 均不能成功。於是,有了 Version1。

Version 1

OpenSSH 有個 ProxyCommand 配置選項,可以配置客戶端通過一個代理服務器上的 netcat 與內網服務器(與代理服務器同一內網)進行通信。配置如下(使用秘鑰鑒權):

Host    your host alias name, such as test.cnblog
    HostName    your host ip
    User    xxx
    ProxyCommand    none
    IdentityFile    path of your private ssh key file 
    PasswordAuthentication    no

然后,配置 APP server:

Host    webserver1
    HostName    xxxx.xxxx.xxxx.xxxx
    User    xxx
    ProxyCommand    ssh test.cnblog nc %h %p
    IdentityFile    path of your private ssh key file 

此時,ssh webserver1 就可以直接訪問 APP server1 了,寫個自動腳本什么的也就很簡單了。

當然,以上操作成功的前提是:所有用到的 SSH 公鑰都已經傳輸到對應服務器了。

后話

在 Ver1 過程中發現,只要建立隧道時使用 ssh -NL,在 MAC 下也可以通過隧道自動登錄到 APP server1 了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM