借助公有雲伺服器內網穿牆ssh訪問內網伺服器

2021-10-11 16:13:42 字數 3880 閱讀 9389

做內網需要用的linux伺服器(a)ubuntu系統,只分配了內網ip,可以連線外網(通過手機熱點wifi或者有線網口),沒有辦法設定路由器。

a的使用者名稱:[email protected]

現在用家裡的電腦c通過ssh連線到a上,當然有teamviewer,向日葵等桌面連線軟體,但傳輸畫面比較卡,故想ssh連線。網路上有花生殼、net123等提供穿牆服務,可以實現ssh,但都比較貴。

買了乙個99元一年的虛擬伺服器。

使用者名稱 ubuntu,埠22,ip:123.123.123.123,密碼

在個人電腦c上可以通過ssh終端實現訪問

ssh -p 22 [email protected]  

step2:配置雲伺服器b,使其埠訪問開放

1>.修改b伺服器的sshd設定        #vi  /etc/ssh/sshd_config

2>把gatewayports開啟(去掉前面的#號注釋):  gatewayports yes

3>存檔後退出,並重新啟動sshd ,#service sshd restart

step3: 配置內網伺服器a,建立a到b的ssh方向**,使用autossh實現更好,在a上操作,參考

建立a機器到b機器的反向**,具體指令為

1>安裝autossh, sudo apt install autossh

2>b到a的ssh**命令,需要輸入

ssh -fcnr 7290:localhost:22 [email protected]
autossh -m 7291 -fcnr 7290:localhost:22 [email protected]
autossh的引數與ssh的引數是一致的,但是不同的是,在隧道斷開的時候,autossh會自動重新連線而ssh不會。另外不同的是我們需要指出的-m引數,這個引數指定乙個埠,這個埠是外網的b機器用來接收內網a機器的資訊,如果隧道不正常而返回給a機器讓他實現重新連線。

step4:建立從b到a的ssh正向**,在b上操作          

建立b機器的正向**,用來做**,具體指令為

ssh -fcnl [a機器ip或省略]:[a機器埠]:[b機器的ip]:[b機器埠] [登陸b機器的使用者名稱@b機器的ip]
這裡的b機器的埠和上面的b機器的埠是一致的,埠1234的也是b機器的。

ssh -fcnl *:1234:localhost:7290 localhost
在b伺服器上嘗試以下命令:netstat -a |grep 7290,如果有返回如下介面,則證明成功

在b伺服器上,執行以下命令,則能ssh訪問a伺服器  ,1234 為b上的埠,7290也是b的埠。      

這一步主要實現了雲伺服器b上自己的埠**,及將b的1234埠**到b的7290埠。沒有這一步,後面直接ssh -p 7290 namea@b的ip,也是一樣。

ssh  -p 1234  [email protected]    ,輸入namea在內網的密碼
step5:個人電腦c測試完成之後就可以,實現在通過雲伺服器端口1234,對映到內網伺服器的埠7290。

在個人電腦c上執行以下命令,

ssh -p 1234 a的使用者名稱@b的公網ip位址。即

ssh -p 1234 [email protected],輸入namea的密碼

step6:內網伺服器a免密登入建立a到b的反向**時需要輸入密碼,為此,要建立a到b的免密碼ssh訪問。

1>在a操作,在a上生成金鑰檔案,ssh-keygen -t rsa

將會生成金鑰檔案和私鑰檔案 id_rsa,id_rsa.pub(如果用dsa則生成id_dsa,id_dsa.pub)

生成位置在/home/user/.ssh/資料夾下(我用的是user使用者所以在root下,生成過程會有提示檔案位置),.ssh 是隱藏資料夾 使用 ls -a檢視

2>在a操作,將公鑰放到伺服器指定位置

將公鑰複製到雲伺服器b的root使用者下的.ss**件夾(用哪個使用者登入就複製到哪個使用者下的.ss**件夾下)                         

scp/home/user/.ssh/id_rsa.pub [email protected]:/home/ubuntu/.ssh/

3>在b操作,安裝公鑰

登入到雲伺服器b上 cd /home/ubuntu/.ssh/

catid_rsa.pub >> authorized_keys

step7:實現內網伺服器a開機自啟反向**。

1>要在內網伺服器a開機自啟執行如下命令:autossh -m 7291 -fcnr 7290:localhost:22 [email protected]

a的系統是ubuntu18.04,為此,要新建/etc/rc.local,參考:

第一步:sudo vi  /lib/systemd/system/rc.local.service,  文字末端新增以下內容

[install]

wantedby=multi-user.target

alias=rc-local.service

第二步:ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/rc.local.service

第三步:sudo chmod 0755 /etc/rc.local

第四步:sudo vi /etc/rc.local,新增需要的開啟執行的命令/或指令碼

autossh -m 7291 -fcnr 7290:localhost:22 [email protected]

這個方法不穩定,發現另外乙個更簡單的方法。

vim  /etc/profile ,把autossh -m 7291 -fcnr 7290:localhost:22 [email protected],新增到最後一行,記得在行尾加上「空格」及「&」

參考

2>使內網伺服器a的root使用者能後無密碼訪問,copy user下面相關金鑰檔案到root下面

參考cp /home/user/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub

cp /home/user/.ssh/id_rsa /root/.ssh/id_rsa

step8:重啟內容內網伺服器a

ps aux |grep autossh ,看是否自動反向ssh到b

在個人電腦c上,連線a 

ssh  -p 1234 [email protected],,輸入namea的密碼,成功。

反向ssh登陸內網伺服器

參考文獻 a要控制b a主機 外網,ip 123.123.123.123,sshd埠 22 b主機 內網,sshd埠 22 無論是外網主機a,還是內網主機b都需要跑ssh daemon 執行第乙個命令 ssh nfr 1234 localhost 22 user1 123.123.123.123 p...

雲伺服器ssh無法登入

用的華為雲伺服器,日常ssh登入時突然顯示 connection established.to escape to local shell,press ctrl alt connection closed by foreign host.但是在雲控制台可以遠端登入,估計是ip攔截之類的問題,輸入 t...

在外網用SSH訪問內網LINUX伺服器

路由器分配的是動態公網ip,且有路由器登入管理許可權。如何在外網用ssh訪問內網linux伺服器?下面介紹如何利用開放的nat123埠對映網路輔助軟體實現。實現此的技術原理 在內網通過網域名稱繫結伺服器,外網ssh訪問連線時,通過網域名稱的訪問,實現訪問內網linux。被訪問端的linux主機上使用...