通過反向代理訪問你的樹莓派

本文教程需要有一臺(tái)公網(wǎng)服務(wù)器

【本文參考鏈接】
利用SSH 反向代理 ,實(shí)現(xiàn)跨局域網(wǎng)連接家里的linux 主機(jī) (樹莓派)
centos7查看端口是否開放


最近新入了一臺(tái)樹莓派4,順便把我的2b出了。以前只是拿來當(dāng)作3D打印服務(wù)器,雖然公司的網(wǎng)絡(luò)有公網(wǎng)IP,但是這個(gè)IP也不固定,每次重新?lián)芴?hào)或者停電之類的操作都會(huì)使得公網(wǎng)IP改變。
以前試過花生殼等內(nèi)網(wǎng)穿透軟件,最近想試試新的方法,公司剛好也有公網(wǎng)服務(wù)器(阿里云),所以才有了這篇文章。
關(guān)于反向代理的介紹,可以查看百度百科:反向代理

注:本文中的公網(wǎng)服務(wù)器地址為11.22.33.44,公網(wǎng)服務(wù)器端口為8022,樹莓派端口為22,一定要根據(jù)你自己的實(shí)際情況修改為你的配置。

一、修改公網(wǎng)服務(wù)器ssh配置文件

#vi /etc/ssh/sshd_config

找到GatewayPorts,默認(rèn)設(shè)置為no,將其修改為yes

GatewayPorts yes

然后重啟ssh服務(wù):

# centos 7
systemctl reload sshd.service
# centos 7以下
service sshd reload

二、將局域網(wǎng)中的樹莓派連接到公網(wǎng)服務(wù)器反向代理端口

# ssh -CqTfnN -R 0.0.0.0:8022:127.0.0.1:22 root@11.22.33.44

其中,8022為公網(wǎng)反向代理端口,22為樹莓派的ssh端口,11.22.33.44為公網(wǎng)服務(wù)器的IP地址。
上述代碼即:將樹莓派的22端口反向代理到IP地址11.22.33.44的8022端口

三、檢查公網(wǎng)服務(wù)器反向代理是否成功

公網(wǎng)服務(wù)器執(zhí)行netstat -anp | grep 8022,如果出現(xiàn)類似下面的結(jié)果,則表示SSH反向代理成功。

tcp    0    0 0.0.0.0:8022    0.0.0.0:*    LISTEN    6520/sshd: root

四、測(cè)試反向代理是否成功

完成上面的步驟以后,就可以通過其他電腦的ssh客戶端,連接公網(wǎng)服務(wù)器的8022端口了。

# ssh -p 8022 root@11.22.33.44

如果連接失敗,繼續(xù)往下看~

五、開放公網(wǎng)服務(wù)器端口

如果按照前面的步驟操作以后,發(fā)現(xiàn)第四步連接不上,可能是公網(wǎng)服務(wù)器需要開放端口。

  1. 首先需要在服務(wù)器管理面板開放8022端口,每個(gè)供應(yīng)商可能操作不同,這里不再贅述。
  2. 我用的服務(wù)器系統(tǒng)是centos 7,輸入命令netstat -tlunp | grep 8022,得到以下結(jié)果:
tcp        0      0 0.0.0.0:8022            0.0.0.0:*               LISTEN      6520/sshd: root

可以看到系統(tǒng)開放了8022端口。然后檢查防火墻端口,輸入iptables-save | grep 8022,發(fā)現(xiàn)什么也沒有輸出。說明防火墻將8022端口攔截了,需要開放防火墻的端口:

firewall-cmd --zone=public --add-port=8022/tcp --permanent
firewall-cmd --reload

第一條命令是添加端口,第二條命令是重載防火墻??吹?code>success字樣后,再次輸入iptables-save | grep 8022可以看到如下字樣,則表示防火墻配置成功。這時(shí)候再回到第四步測(cè)試就可以連接了。

-A IN_public_allow -p tcp -m tcp --dport 8022 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT

以下內(nèi)容為復(fù)制參考鏈接一中的原文,并做了注釋,已經(jīng)測(cè)試正常

六、編寫腳本守護(hù)反向代理

1. 設(shè)置樹莓派免密碼登錄公網(wǎng)服務(wù)器

在內(nèi)網(wǎng)樹莓派中切換到root賬戶:sudo su,然后執(zhí)行以下命令生成ssh公鑰

ssh-keygen -t rsa -P ''

/root/.ssh/中 會(huì)生成兩個(gè)文件id_rsaid_rsa.pub,然后將id_rsa.pub復(fù)制到公網(wǎng)服務(wù)器中

scp /root/.ssh/id_rsa.pub root@11.22.33.44:~

切換到公網(wǎng)服務(wù)器中執(zhí)行如下代碼

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改文件權(quán)限,這一步很必要

chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh/

2. 在公網(wǎng)服務(wù)器總新建關(guān)閉代理的腳本

從樹莓派上調(diào)用此腳本,可以從公網(wǎng)服務(wù)器關(guān)閉反向代理進(jìn)程。
執(zhí)行sudo vi /root/kill_ssh_agent.sh,并輸入以下內(nèi)容:

#!/bin/sh
if [ -n "$1" ] && [ "$1" -gt "0" ];then
    PID=$(netstat -anp | grep $1 | awk '/sshd/ && !/awk/{print $7}')
    PID=${PID%%/*}
    if [ -n "${PID}" ];then
        kill -9 $PID && exit 0
    fi
fi
exit 1

將此腳本保存為kill_ssh_agent.sh,并記住路徑,我的是保存在了/root/kill_ssh_agent.sh,然后添加可執(zhí)行權(quán)限:

sudo chmod +x /root/kill_ssh_agent.sh

3. 在樹莓派上創(chuàng)建反向代理進(jìn)程守護(hù)腳本

在樹莓派上執(zhí)行sudo vi /root/ssh_agent_daemon.sh,并輸入以下內(nèi)容:

#!/bin/bash

REMOTE_USERNAME=root
REMOTE_SERVER_IP="11.22.33.44"
REMOTE_PORT=8022
#原文中用此命令獲取IP
#LOCALHOST_IP=`/sbin/ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:"`
#其實(shí)用下面的代碼就可以獲取到
#LOCALHOTST_IP=$(hostname -I)
#但是經(jīng)測(cè)試,這么寫可能會(huì)連接不上的,所以按照之前的寫法,直接如下寫成本機(jī)地址即可
LOCALHOTST_IP="127.0.0.1"
LOCALHOST_PORT=22

while true ;
do
    PID=$(ssh -l root ${REMOTE_SERVER_IP}  netstat -anp | grep ${REMOTE_PORT} | awk '/sshd/ && !/awk/{print $7}')
    PID=${PID%%/*}
    if [ -n "$PID" ] && [ "$PID" -gt "0" ];then
        sleep 30s
    else
        /usr/bin/ssh -l root ${REMOTE_SERVER_IP} /bin/sh /root/kill_ssh_agent.sh ${REMOTE_PORT}
        /usr/bin/ssh -CqTfnN -R 0.0.0.0:${REMOTE_PORT}:${LOCALHOST_IP}:${LOCALHOST_PORT} ${REMOTE_USERNAME}@${REMOTE_SERVER_IP}
    fi
done

exit 0

保存,并添加可執(zhí)行權(quán)限:

sudo chmod +x /root/ssh_agent_daemon.sh

這個(gè)路徑也要用到。

4. 在公網(wǎng)服務(wù)器中,設(shè)置 SSH 連接為長(zhǎng)連接

sudo vi /etc/ssh/sshd_config

找到ClientAliveIntervalClientAliveCountMax,并按照下面修改:

#每1分鐘發(fā)送一個(gè)心跳信號(hào)給客戶端
ClientAliveInterval 60
#最大超時(shí)次數(shù),客戶端不響應(yīng)則關(guān)閉連接
ClientAliveCountMax 3

5. 在樹莓派中將守護(hù)進(jìn)程腳本設(shè)置為開機(jī)啟動(dòng)

sudo vi /etc/rc.local

將下面這一行添加到exit 0之前

/bin/sh /root/ssh_agent_daemon.sh &

注意腳本路徑,這里必須寫完整路徑/root/ssh_agent_daemon.sh,一定不要寫成~/ssh_agent_daemon.sh,否則會(huì)啟動(dòng)失敗

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

相關(guān)閱讀更多精彩內(nèi)容

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