ssh隧道穿越內(nèi)網(wǎng)訪問局域網(wǎng)內(nèi)主機(jī)

最近,由于新冠肺炎影響,我們都在家辦公。但是,小伙伴需要本地電腦訪問我家里局域網(wǎng)內(nèi)的數(shù)據(jù)服務(wù)器,剛開始我們使用了teamviewer,但感覺不是很安全,于是我們研究了下通過ssh隧道穿越來進(jìn)行訪問。

如下圖所示,我們的需求是本地主機(jī)192.168.1.100能通過ssh遠(yuǎn)程登錄另一個(gè)局域網(wǎng)下的目標(biāo)主機(jī)192.168.3.87,為了達(dá)到這個(gè)目標(biāo),我們需要一個(gè)擁有公網(wǎng)ip的代理服務(wù)器47.55.38.19,來做ssh的端口轉(zhuǎn)發(fā)。

image.png

下面,我們分別對代理服務(wù)器、目標(biāo)主機(jī)和本地主機(jī)進(jìn)行配置。

一、配置代理服務(wù)器

1、開放端口

代理服務(wù)器我用的是阿里云服務(wù)器,后面我會用到端口10022進(jìn)行轉(zhuǎn)發(fā),所以需要在阿里云上開放這個(gè)端口,進(jìn)入安全組,添加一條訪問規(guī)則,如下所示:

image-20200512221252191.png

2、修改ssh配置文件

編輯/etc/ssh/sshd_config文件

$ vim /etc/ssh/sshd_config

在sshd_config中添加一條配置,打開轉(zhuǎn)發(fā)功能,如下:

GatewayPorts yes

wq保存好以后,重啟ssh

service ssh reload

二、配置目標(biāo)主機(jī)

非常簡單,執(zhí)行下面命令就行了

$ ssh -T -f -N -g -R :10022:127.0.0.1:22 root@47.55.38.19

這條命令的作用是:

  1. 建立一條ssh連接,目標(biāo)主機(jī)192.168.3.87連接上代理服務(wù)器47.55.38.19
  2. 如果有其他ssh客戶端連接到代理服務(wù)器47.55.38.19的10022端口上時(shí),則代理服務(wù)器會將這條連接轉(zhuǎn)發(fā)到目標(biāo)主機(jī)192.168.3.87上

在目標(biāo)主機(jī)192.168.3.87上通過下面命令查看是否建立連接:

$ ps -ef | grep ssh
root    3050     1  0 13:47 ?        00:00:01 ssh -T -f -N -g -R :10022:127.0.0.1:22 root@47.55.38.19

三、本地主機(jī)連接目標(biāo)主機(jī)

當(dāng)代理服務(wù)器和目標(biāo)主機(jī)配置好以后,我們就可以使用本地主機(jī)192.168.1.100連接目標(biāo)主機(jī)了,命令如下:

# 通過test用戶登錄到目標(biāo)主機(jī)
$ ssh -p 10022 test@47.55.38.19

需要注意的是:test是目標(biāo)主機(jī)192.168.3.87的用戶,而不是代理服務(wù)器的用戶,代理服務(wù)器只是做了一個(gè)ssh轉(zhuǎn)發(fā)。所以,我們登錄時(shí)的密碼或者無密碼登錄,都與目標(biāo)主機(jī)配套的。

遇到問題

1、登錄時(shí)超時(shí)了,沒任何反應(yīng)

這是因?yàn)槲覄傞_始配置時(shí),沒有在阿里云上開啟10022端口。

2、ssh: connect to host 47.55.38.19 port 10022: Connection refused

這是因?yàn)槲覀儧]配置好ssh,編輯/etc/ssh/sshd_config文件,將GatewayPorts設(shè)置為yes,并且重啟ssh

service ssh reload

然后在目標(biāo)機(jī)192.168.1.100上,關(guān)閉以前的轉(zhuǎn)發(fā),重新開啟新的。

$ ps -ef | grep ssh
rooot    3050     1  0 13:47 ?        00:00:01 ssh -T -f -N -g -R :10022:127.0.0.1:22 root@47.55.38.19

# 關(guān)閉以前連接
$ kill -9 3050

# 開啟新的連接
$ ssh -T -f -N -g -R :10022:127.0.0.1:22 root@47.55.38.19

ssh轉(zhuǎn)發(fā)命令知識點(diǎn)

命令如下:

$ ssh -T -f -N -g -R :10022:127.0.0.1:22 root@47.55.38.19

各個(gè)選項(xiàng)參數(shù)作用如下:

  • -T 不分配偽終端;
  • -f 使 ssh 進(jìn)程在用戶輸入密碼之后轉(zhuǎn)入后臺運(yùn)行;
  • -N 不執(zhí)行遠(yuǎn)程指令,即代理服務(wù)器不需執(zhí)行指令,只作端口轉(zhuǎn)發(fā);
  • -g 允許代理服務(wù)器連接到本地轉(zhuǎn)發(fā)端口;
  • -R 將代理服務(wù)器指定端口上的連接轉(zhuǎn)發(fā)到本機(jī)端口;
  • root@47.55.38.19
    表示使用代理服務(wù)器47.55.38.19的用戶root 來連接;
  • :10022:127.0.0.1:22
    表示本機(jī)回環(huán)接口(127.0.0.1,也可使用本機(jī)其他網(wǎng)絡(luò)接口的地址,比如以太網(wǎng) IP 或 WiFi IP)的 22 端口連接到遠(yuǎn)程主機(jī)的 10022 接口,因遠(yuǎn)程主機(jī) 10022 綁定的地址為空,所以遠(yuǎn)程主機(jī)會監(jiān)聽其所有網(wǎng)絡(luò)接口的 10022 端口。

參考:

利用SSH隧道技術(shù)穿越內(nèi)網(wǎng)訪問遠(yuǎn)程設(shè)備

SSH隧道技術(shù)----端口轉(zhuǎn)發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容