在阿里上搭了典型的 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 了。
