利用ssh與區域網內主機建立遠端連線實現區域網穿透

2021-09-22 18:22:33 字數 2462 閱讀 8267

公司新開發的專案,利用嵌入式linux系統,要求其中的軟體能夠支援遠端公升級,個人感覺如果能實現遠端操作會更方便一些,於是在網上搜尋方法,當時的想法是希望能夠找到一種ssh**服務,能夠實現兩台不同區域網內電腦可以通過ssh**伺服器建立遠端連線,可以保證資料的加密性。

後來在網上找了很多資料,發現找不到這種**服務,但是同時也發現了另一種解決辦法:ssh埠**,其實我感覺就類似於ssh**服務了,而且利用這種方法還可以翻牆!不過這是另一篇文了,沒想到ssh這麼強大。。。

下面簡述這種連線方式的工作流程,先做一些假設規定:

1、我目前使用的公司區域網內電腦稱作電腦a。

2、需要連線到的遠端嵌入式linux系統稱作電腦b,由於用的3g網路,所以ip位址是不固定的。

3、ssh埠**伺服器,稱作電腦s,要有固定的外網ip位址,現在很多雲伺服器可以選擇,而且有很多免費

的,你也可以申請個網域名稱繫結上,省的記ip位址。。。

4、我有伺服器s的某個使用者(稱作user)的私鑰,稱作user_rsa,沒有密碼的。

正常情況下,我只要利用s_rsa,在a或者b的終端,輸入:ssh -o stricthostkeychecking=no -o tcpkeepalive=yes -o serveraliveinterval=300 -o serveralivecountmax=2 -i s_rsa user@s 就可以與伺服器s建立ssh連線,注意上面命令-o選項是為了實現第一次建立連線時避免人工互動,並且會定期傳送資料到伺服器以保持連線,檢測是否掉線,確保可以正常連線後,往下進行。。。

下面直接給出本流程中需要用到的ssh命令,假設我要用公司電腦a連線遠端電腦b,

那麼下面的命令就在b上執行:

ssh -c -f -n -r listen_port:dst_host:dst_port user@remote_host

命令引數解釋:

-r  將遠端主機(伺服器)的某個埠**到本地端指定機器的指定埠

-c  壓縮資料傳輸

-f   後台認證使用者/密碼,通常和-n連用,不用登入到遠端主機

listen_port:  遠端主機s上的某個埠

dst_host:  b的ip位址,一般是127.0.0.1

dst_port:  b 的埠號,一般是22

user:  伺服器s的使用者名稱

比如我在b電腦上執行:ssh -c -f -n -r 7001:127.0.0.1:22 user@remote_host

就是說,要伺服器s監聽埠7001,任何傳送這個埠的資料都會**到我的b電腦的22號埠上。

這樣,我只要在a電腦上通過ssh進入伺服器s,然後執行:ssh -p 7001 root@localhost 就可以操作b電腦了,要注意命令中root為b電腦的使用者名稱,localhost表明與自己的埠7001建立連線,因為7001已經對映到b電腦的22號埠上,所以就相當於直接用a電腦連線了b電腦。

結合上述,實際使用中可能是如下的命令:

b電腦上執行:

ssh -o stricthostkeychecking=no -o tcpkeepalive=yes -o \

serveraliveinterval=300 -o serveralivecountmax=2 \

-i 秘鑰檔案 -c -f -n -r 7001:127.0.0.1:22 user@remote_host

建立監聽。

a電腦上執行:

ssh -i 秘鑰檔案 user@remote_host

連線伺服器s。

然後在s上執行:

ssh -i 秘鑰檔案 -p 7001 root@localhost

連線b電腦。

上面是實際使用時的流程,但是想要時刻能用a電腦連線b電腦,可能還要一些判斷b電腦掉線之類的指令碼,下面是我自己的指令碼,放到電腦b上,開機自動執行(之前沒用過shell指令碼,亂寫的):

#!/bin/sh

exit=1

while test $exit -eq 1

doif test $(ps | grep -c 'ssh.*-o stricthostkeychecking=no') -eq 1;then

/usr/local/bin/ssh -v -o stricthostkeychecking=no -o tcpkeepalive=yes \

-o serveraliveinterval=120 -o serveralivecountmax=2 \

-i /etc/init.d/joyo_rsa -c -f -n -r 10001:127.0.0.1:22 [email protected]

fisleep 60

done

實際測試時,有可能伺服器正在監聽某個埠,然後指令碼又執行一次,讓伺服器監聽同樣的埠,這種情況下還是會建立ssh連線,但是伺服器會返回監聽埠失敗,這時可以選擇性的結束伺服器上的ssh程序。

重新修改編譯了sshd服務端的原始碼,實現了可以選擇性的允許哪些客戶端建立連線,減小的伺服器端的壓力,詳情請見下面連線:

利用PuTTY工具快速連線區域網內的主機

在傳統的三颱機器連線中,c 機器不能被客戶端 a直接訪問,那麼a機器又要經常管理c上的資料庫,我們一般都是遠端桌面登入到b 假設b為windows 再通過b遠端桌面連線到c。下面來介紹一種比較簡單的辦法,通過利用putty工具可以實現對c機器的管理。開啟putty.exe,配置好遠端主機b的ip和埠...

ssh 跳轉進入區域網內部電腦

假設區域網內部有兩台機器,a和b,其中機器a具有公網ip,機器b只有內網ip,網路資訊如下。機器a 公網ip 11.23.45.67 公網ssh埠 17890 內網ip 192.168.1.30 ssh 使用者名稱 mma 機器b內網ip 192.168.1.10 ssh 使用者名稱 mmb ssh...

通過ssh遠端(在區域網內)操控linux

推薦大家看乙個up主的 首先在linux終端裝乙個server sudo apt get install openssh server獲取linux在區域網中的ip位址,如果不能執行這個,安裝乙個包sudo apt install net tools ifconfig在輸出裡面找inet後面就是,1...