外網通過ssh代理連線內網伺服器
阿新 • • 發佈:2018-11-12
內網伺服器通過公網ssh代理實現內網穿透
前言
有時需要通過外網連線到內網的伺服器。
- 前提:需要有廣域網伺服器,伺服器之間免密。
1 環境
伺服器型別 | 系統 | 主機名 | 使用者名稱 | IP | 說明 |
---|---|---|---|---|---|
客戶端 | Window 10 | node1 | 本機 | ssh連線工具(例如:Xshell) | |
中轉伺服器 | ubuntu 16.04 | node2 | user2 | 8.8.8.8 | 有廣域網IP |
目標伺服器 | ubuntu 16.04 | node3 | user3 | 172.16.156.101 | 區域網IP,可以訪問外網 |
2 配置目標伺服器
2.1 安裝autossh服務
sudo apt install -y autossh
autossh命令引數解釋如下:
- -f 後臺執行
- -C 允許壓縮資料
- -N 不執行任何命令
- -R 將埠繫結到遠端伺服器,反向代理
- -L 將埠繫結到本地客戶端,正向代理
- -p 轉發伺服器B的SSH登入埠號,預設為22
結合:
- ssh -fCNR 反向代理
- ssh -fCNL 正向代理
2.2 命令列配置連線中轉伺服器--臨時有效
建立目標伺服器到中轉伺服器的反向代理,具體指令為
autossh -M 中轉伺服器埠 -fCNR [中轉伺服器IP]:中轉伺服器埠:目標伺服器IP:目標伺服器埠 中轉伺服器使用者名稱@IP
例如:
autossh -M 5000 -o "ServerAliveInterval 30" -CNR 6000:localhost:22 [email protected]
- 說明:埠可以自定義,
- 第一次連線時不加-f後臺執行,需要測試;
- -M 5000:中轉伺服器用來接收目標伺服器的資訊,如果隧道不正常而返回給目標伺服器讓他實現重新連線,相當於會話保持;
- -o "ServerAliveInterval 30":保持會話時間間隔,autossh中應該可以省略;
- -CNR 6000:6000為中轉伺服器的反向代理埠;
- localhost:22:目標Linux伺服器的ssh埠,預設22。
3 配置中轉伺服器
3.1 測試連線目標伺服器
ssh [email protected] -p 6000
如果可以執行表示成功!
3.2 建立中轉伺服器的正向代理
建立中轉伺服器的正向代理,用來做轉發,具體指令為
ssh -fCNL [目標Linux伺服器IP]:目標Linux伺服器埠:中轉伺服器IP:中轉伺服器埠 中轉伺服器使用者名稱@中轉伺服器IP
例:
ssh -fCNL "*:3000:localhost:6000" [email protected]
輸入目標伺服器的密碼
3.3 客戶端
直接配置Xshell
IP:8.8.8.8
埠:3000
使用者名稱:$user3
密碼:XXXXXXX
或者任意伺服器登陸;
ssh -p 3000 [email protected]
輸入目標伺服器的密碼
4 配置自啟動
4.1 適用於CentOS6 和 CentOS7
輸入
vim /etc/rc.d/rc.local
追加如下內容
autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 [email protected]
ServerAliveInterval:保持活力時間
ServerAliveCountMax:允許的最大會話數
授予執行許可權
chmod +x /etc/rc.d/rc.local
4.2 適用於system管理的服務,如:CentOS 7 / Ubuntu 16 / Ubuntu 18
4.2.1 編寫autossh自啟動指令碼
vim /lib/systemd/system/autossh.service
新增如下內容
[Unit]
Description=AutoSSH service
After=network.target
[Service]
Type=forking
ExecStart=/etc/autossh.local
[Install]
WantedBy=multi-user.target
Alias=autossh.service
4.2.2 編輯呼叫的普通指令碼
vim /etc/autossh.local
新增如下內容
#!/bin/bash -e
sudo -u $user3 autossh -M 5000 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 5" -fCNR 6000:localhost:22 [email protected]_ip &
4.2.3 設定開機自啟動
sudo systemctl enable autossh # 加入自啟動
sudo systemctl start autossh # 啟動服務
sudo systemctl status autossh # 檢視服務狀態