在阿里上搭了典型的 Nginx + APP server 的架構:html
即,只有 Nginx 服務器與公網連接。而後,每次部署升級服務器都要先 SSH 到 Nginx 再 SSH 到 server1 及 server2。問題來了,怎樣才能快速有效的管理服務器?web
上 Puppet、Chef 這樣的配置管理工具?一個手掌能數過來的服務器不必啊,隨意 Version 0 誕生了。服務器
Ver0 總結起來就是基於 SSH 隧道的 Python 腳本,具體能夠參見 簡易自動化部署服務器集羣。架構
在實際使用中發現,在 MAC OS 下每次經過隧道自動登陸 APP server 均不能成功。因而,有了 Version1。ssh
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