最近辖众,由于新冠肺炎影響卓起,我們都在家辦公。但是凹炸,小伙伴需要本地電腦訪問我家里局域網(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ā)锣光。
下面笆怠,我們分別對代理服務(wù)器、目標(biāo)主機(jī)和本地主機(jī)進(jìn)行配置誊爹。
一蹬刷、配置代理服務(wù)器
1、開放端口
代理服務(wù)器我用的是阿里云服務(wù)器频丘,后面我會用到端口10022進(jìn)行轉(zhuǎn)發(fā)办成,所以需要在阿里云上開放這個(gè)端口,進(jìn)入安全組搂漠,添加一條訪問規(guī)則迂卢,如下所示:
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
這條命令的作用是:
- 建立一條ssh連接腾降,目標(biāo)主機(jī)192.168.3.87連接上代理服務(wù)器47.55.38.19
- 如果有其他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 端口。