如今咱們有一臺內網主機 A,在局域網內是能夠訪問的,可是若是咱們如今不處在局域網內,能夠選擇 *** 鏈接,但這樣其實並不太方便,因此本節咱們來講明一下利用 SSH 反向隧道來實現訪問內網主機的方法。
shell
首先咱們須要有一臺公網主機做爲跳板,這臺主機是能夠公網訪問的,咱們將其命名爲 B,它的 IP 假設爲 10.10.10.10。網絡
因此兩臺機器網絡配置以下:app
IP:192.168.1.2ssh
SSH端口: 22ide
用戶名:usera測試
密碼:passwordaspa
內網配置端口:22(即配置 SSH 端口的反向隧道)rest
IP:10.10.10.10orm
SSH端口: 22ci
用戶名:userb
密碼:passwordb
公網端口:22001(即用 B 的 22001 端口連到 A 的 SSH 22 端口)
首先咱們須要在 A 主機上生成 SSH 祕鑰,和 B 用 SSH 創建認證。
首先在主機 A 上執行以下命令生成 SSH 祕鑰:
ssh-keygen -t rsa -C "your@email.com"
命令裏面的郵箱須要自行更換。
而後利用以下命令將 A 的 SSH 祕鑰添加到 B 的 authorized_keys 裏面:
ssh-copy-id userb@10.10.10.10
執行後會提示輸入主機 B 的密碼,執行完畢以後,咱們登陸到 B,就發現 authorized_keys 裏面就多了 A 的 SSH 公鑰了,成功創建 SSH 認證。
B 主機須要更改 /etc/ssh/sshd_config 文件,修改以下一行:
GatewayPorts yes
這樣能夠把監聽的端口綁定到任意IP 0.0.0.0上,不然只有本機 127.0.0.1 能夠訪問。
而後重啓 sshd 服務:
sudo service sshd restart
主機 A 再安裝一個 AutoSSH,以 Ubuntu 爲例,命令以下:
sudo apt-get install autossh
而後執行以下命令便可完成反向 SSH 配置:
autossh -M 55555 -NfR 0.0.0.0:22001:localhost:22 userb@10.10.10.10
這裏 -M 後面任意填寫一個可用端口便可,-N 表明只創建鏈接,不打開shell ,-f 表明創建成功後在後臺運行,-R 表明指定端口映射。
這裏是將 A 主機的 22 端口映射到 B 主機的 22001 端口,這樣就完成了配置。
主要咱們再訪問 B 主機的 22001 端口,就會自動轉發到 A 主機的 22 端口了,便可以公網訪問了。
接下來 SSH 測試鏈接 A 主機便可:
ssh usera@10.10.10.10 -p 22001
輸入密碼,完成鏈接。