ubuntu實現SSH外網連接內網

參考:崔大神


準備

一臺內網機器 A

  • IP:192.168.10.128
  • SSH端口: 22
  • 用戶名:a
  • 密碼:passworda
  • 內網配置端口:22(即配置 SSH 端口的反向隧道)

帶有公網ip的機器 B

  • IP:111.123.123.123
  • SSH端口: 22
  • 用戶名:b
  • 密碼:passwordb
  • 公網端口:22001(即用 B 的 22001 端口連到 A 的 SSH 22 端口)

配置SSH密鑰

注意分清A、B,A是內網,B是公網。在 A 主機上生成 SSH 祕鑰,和 B 用 SSH 建立認證。
###A的配置(內網主機)

ssh-keygen -t rsa -C "[email protected]"

郵箱要換成你自己的,直接用下面這個也行,都是默認的

ssh-keygen

這裏寫圖片描述
直接連按3次enter就可以了,什麼都不用輸入,密鑰自動保存在默認的地方,方便下一步操作。
你會獲得一長串SHA256:......注意不要清屏了,這個等下有用

然後利用如下命令將 A 的 SSH 祕鑰即SHA256:......裏面的字符串,添加到 B 的 authorized_keys 裏面:

ssh-copy-id [email protected]

注意換成你自己的ip,執行後會提示輸入主機 B 的密碼,執行完畢之後,我們登錄到 B,就發現 authorized_keys 裏面就多了 A 的 SSH 公鑰了,成功建立 SSH 認證。
這個步驟主要是完成了從機子A到Bssh的免密登錄,具體可以看~/.ssh/下面的一些密鑰更改情況
這裏寫圖片描述

###B的配置(公網主機)
只需要微微改一下配置

sudo vi /etc/ssh/sshd_config

添加

GatewayPorts yes

這句話的意思是監聽端口可以綁定到任意其他ip,不然只有本機127.0.0.1可以訪問
重啓一下ssdh服務

sudo service sshd restart

###A的配置(內網主機)
弄好了上面的,再回到A,安裝一個autossh,注意,這個東西ubuntu安裝比較方便,我在centos試了一下,似乎不能直接用命令安裝了,要去網上下,比較麻煩。
ubuntu爲例,執行下面命令完成安裝

sudo apt-get install autossh

開啓autossh

autossh -M 22002 -NfR 0.0.0.0:22001:localhost:22 [email protected]

注意最後一個ip,是公網ip

這裏 -M 後面任意填寫一個可用端口即可,-N 代表只建立連接,不打開shell ,-f 代表建立成功後在後臺運行,-R 代表指定端口映射。
這裏是將 A 主機的 22 端口映射到 B 主機的 22001 端口,這樣就完成了配置。
主要我們再訪問 B 主機的 22001 端口,就會自動轉發到 A 主機的 22 端口了,即可以公網訪問了。

另外再提醒一下,如果是一些供應商的雲主機,記得要去安全策略組那裏開放22002、22001兩個端口,不然怎麼樣都是訪問不了的。


連接測試

ssh [email protected] -p 22001

輸入內網主機a的密碼,這時候你就會驚奇地發現已經打開了內網主機。

另外,爲了方便,可以考慮將autossh設置爲開機啓動後
ubuntu爲例,因爲不同機器的開機啓動文件稍有差異,具體哪個請自查

sudo vi /etc/rc.local

添加下面這行代碼

autossh -M 22002 -NfR 0.0.0.0:22001:localhost:22 [email protected]

ok,這次實驗到此爲止,來源請翻到頭頂。


更換內網主機

這個內網主機a2的設置首先按上面重複一遍
然後回到公網主機b,關掉前面的監聽端口

sudo netstat -tunlp|grep 22001

看到的記錄中有 23630/sshd: b

kill -9 23630

然後回到a2,開啓

autossh -M 22002 -NfR 0.0.0.0:22001:localhost:22 [email protected]

反正要kill掉,不然不管怎麼弄,ssh到的都是原來的a主機。
或者換個端口號也可以。


問題

機器重啓後,autossh會以root身份運行,如果一開始不是用root帳號弄的,會有問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章