SSH ProxyCommand 實踐


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

Nginx APP server

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

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

Version 0

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

在實際使用中發現,在 MAC OS 下每次經過隧道自動登陸 APP server 均不能成功。因而,有了 Version1。ssh

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 了,寫個自動腳本什麼的也就很簡單了。code

固然,以上操做成功的前提是:全部用到的 SSH 公鑰都已經傳輸到對應服務器了。server

後話

在 Ver1 過程當中發現,只要創建隧道時使用 ssh -NL,在 MAC 下也能夠經過隧道自動登陸到 APP server1 了。htm

相關文章
相關標籤/搜索