使用 autossh 建立反向 SSH 隧道管理个人计算机
?
假設你有這樣一個需求:你在家中有一臺 Linux/Unix 設備,可以是路由器、NAS 或者臺式機,存有自己常用工具或者數據,想要在自己外出時也能隨時訪問。那么你現在的目的和我一樣了,你所需要的是少許 Linux/Unix 經驗以及一臺能夠從公網訪問的中繼服務器。我們所需要的技術是通過 SSH 隧道搭建一個反向代理。
配置
在你的 SSH 配置文件中加入這一行GatewayPorts clientspecified。可以直接使用命令:sudo echo "GatewayPorts clientspecifie" >> /etc/ssh/sshd_config。
然后重新加載 SSH 配置文件:sudo reload ssh。
然后在本地建立連接:?ssh -f -R 0.0.0.0:20000:localhost:22 local_user@a_a_a_a
現在還有兩個問題:你需要保持終端開啟防止 SSH 進程被關閉;由于網絡故障/波動導致 SSH 終斷時無法自動重連。
前者可以使用?-N?參數來解決,后者需要?supervisor?等第三方監控工具。
使用 autossh 代替 ssh
不過我們還有一個更常用的選擇方案:autossh:
autossh -M 20001 \ -fN -o "PubkeyAuthentication=yes" \ -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" \ -R a_a_a_a:20000:localhost:22 \ -p 8383 remote_user@a_a_a_a說明:
- -M 20001?選項指定中繼服務器上的監視端口,用于交換監視 SSH 會話的測試數據,需要保證該端口在服務器上未被占用。
- -o?用于設置 autossh 參數。
- -f?指定 autossh 在后臺運行,并不會傳給 ssh。和 ssh 的?-f?不一樣,autossh 指定?-f?時將無法尋求密碼。指定?-f?時,會將環境變量?AUTOSSH_GATETIME?覆蓋為 0!
開機啟動
在 Ubuntu 中我們可以使用 systemd 管理 autossh 的開機啟動問題(舊版本中可以使用 init.d)。配置很簡單,只需要創建一個?/etc/systemd/system/remote-autossh.service?文件:
[Unit] Description=AutoSSH service for remote tunnel After=network-online.target[Service] User=your_username ExecStart=/usr/bin/autossh -M 20001 -N -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R a_a_a_a:20000:localhost:22 -p 8383 remote_user@a_a_a_a[Install] WantedBy=multi-user.target這樣就創建了一個?remote-autossh?服務,并指定其在網絡服務啟動后啟動。可以運行?systemctl daemon-reload && systemctl start remote-autossh?立即啟動服務,或者?systemctl enable remote-autossh.service?啟動服務并設置為開機啟動。
需要注意的是,配置文件中的 autossh 命令需要替換為其絕對地址,以及不支持?-f?參數。
========================================================================================================================================例子=============================================================
通常家用的寬帶沒有公網IP,運營商現在都分配的是內網IP。這樣,公網上的機器就無法直接訪問到內網的機器。
SSH具有建立反向隧道的能力,進行內網穿透,前提是我們有一臺有公網IP的機器,假設機器情況如下:
| A | 公網 | 114.114.114.114 | 80 |
| B | 內網 | 192.168.10.1 | 7777 |
1.修改公網機器A的SSH配置文件/etc/ssh/sshd_config
GatewayPorts yes這樣可以把監聽的端口綁定到任意IP 0.0.0.0上,否則只有本機127.0.0.1可以訪問。
?
2.在內網B的機器上執行命令,建立反向隧道
ssh -NfR 80:127.0.0.1:7777 root@114.114.114.114然后輸入密碼,通道即建立成功。?
-N:只建立連接,不打開shell?
-f:建立成功后在后臺運行?
-R:指定端口映射
此時,會在A的機器上開一個80端口監聽,所有訪問公網機器A的80端口的請求都會轉發到內網B的7777端口上。?
在公網A機器上查看端口:
[root@upshi ~]# lsof -i:80
COMMAND ?PID USER ? FD ? TYPE DEVICE SIZE/OFF NODE NAME
sshd ? ?1578 root ? ?8u ?IPv4 ?19403 ? ? ?0t0 ?TCP *:cbt (LISTEN)
?
如果不想每次都輸入密碼,可以配置一下SSH免密登錄。
AutoSSH 自動重連
使用SSH的方式不夠穩定,使用AutoSSH可以自動在連接斷開時自動重連,再把AutoSSH加入系統服務自動啟動,則可以做到穩定的連接。
1.安裝AutoSSH
sudo apt-get install autossh2.執行AutoSSH命令
autossh -M 5555 -NR 80:127.0.0.1:7777 root@114.114.114.114 -M:在5555端口上監聽連接的變化,只要斷開就重連? 少了-f 參數,因為AutoSSH本來就在后臺運行?
? ??
總結
以上是生活随笔為你收集整理的使用 autossh 建立反向 SSH 隧道管理个人计算机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10锁屏c语言,怎样在Win10锁
- 下一篇: px4 uavcan linux,PX4