購買了阿里雲多台服務器,其中只有一台服務器,開通了外網,其他服務器沒有外網,訪問其他服務器的時候,需要先登錄有外網的服務器A,然后在服務器A上再通過ssh,訪問目標服務器,這樣很麻煩。
為了解決這個問題,我們在A服務器上用我們萬能的nginx 代理ssh 協議的方式,使得我們客戶端電腦可以直接訪問目標服務器。
環境准備:A服務器需要安裝nginx,其中nginx,是通過 yum 安裝的普通nginx,沒有增加任何其他模塊、依賴、包等。
在nginx的主配置文件中,最下方,所有的{} 以外,增加 一個代碼塊(和http{}平級)如下:
stream { include /etc/nginx/stream.d/*.conf; }
然后 在/etc/nginx/ 文件夾下,新建 stream.d 文件夾
接下來,在stream.d 文件夾中,創建一個文件,我這里用了協議名和ip做文件名
vim ssh37.conf
下一步的時候,輸入文件內容
upstream ssh37 { server 172.19.89.37:22; } server { listen 12201; proxy_pass ssh37; proxy_connect_timeout 1h; proxy_timeout 1h; }
其中 upstream 后的ssh37 是命名,隨便取,只要不重復就可以
upstream中 server 后的ip 是局域網服務器的ip,22 是這個服務器的ssh開放端口,如果有修改,對應修改即可
server 下面的 listen 后的 12201 就是客戶端最終訪問服務器時用的端口(如果是阿里雲,需要注意,這個端口需要在安全策略中開通)
proxy_pass 后的ssh37 和upstream 后面的ssh37 一致即可
proxy_connect_timeout 連接時間,根據實際情況修改即可
proxy_timeout 連接時間,根據實際情況修改即可
最后我們保存退出,執行重新加載配置文件即可完成配置
nginx -s reload
接下來我們可以通過客戶端進行測試。
ssh 用戶名@服務器A的外網ip -p 12201
如果沒有問題,即可看到要求輸入密碼的提示框,輸入后即可登錄