从远程位置创建 SSH 隧道,但从本地计算机访问不可靠

从远程位置创建 SSH 隧道,但从本地计算机访问不可靠

两台计算机:

  1. Desktop-Ubuntu;固定本地 IP,连接到调制解调器,端口 22 打开并转发到它。由于动态 IP,我有一个无 IP 帐户。因此 domain-Desktop-Ubuntu.com 将传入请求转发到此计算机。
  2. 远程 Raspberry Pi 3 连接到蜂窝网络,该网络的所有传入请求均已被 ISP 关闭。

我需要从 Desktop-Ubuntu 到 RPi 的 SSH 访问。因为无法直接访问,所以我建立了一个隧道。经过一番尝试后,我终于让它持续工作了(autossh例如),这是我的架构:

在 RPi

sshd_config

 ClientAliveInterval 120     
 ClientAliveCountMax 720

Crontab 每 5 分钟检查一次ssh进程 ID 是否不为空。
screen用于保持ssh输出是一个单独的 shell 窗口。

*/5 * * * * /bin/sh /path-to/check-ssh-tunnel.sh

check-ssh-tunnel.sh

COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -R 2255:localhost:22 [email protected] -g"
COMMAND_SSH="/usr/bin/ssh -R 2255:localhost:22 domain-Desktop-Ubuntu.com -g"
PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
if [ "$PID" = "" ]
then
    $COMMAND
fi

以下是ps aux | grep ssh重启三小时后我得到的相关信息:

pi        2128  0.0  0.2   5396  2252 ?        Ss     08:25     0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 [email protected] -g  
pi        2130  0.0  0.5   9132  4748 pts/0    Ss+  **08:25**   0:00 /usr/bin/ssh -R 2255:localhost:22 [email protected] -g

如果我的kill 2128cron 运行并且:

pi        4755  0.0  0.2   5396  2092 ?        Ss     11:25     0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 [email protected] -g     
pi        4756  0.0  0.5   9132  4840 pts/0    Ss+  **11:25**   0:00 /usr/bin/ssh -R 2255:localhost:22 [email protected] -g

访问 RPi从桌面-Ubuntu

ssh -p 2255 pi@localhost

我的问题是这种连接是随机的:

  • 有时它会要求输入密码,然后我才能连接
  • 有时ssh: connect to host localhost port 2255: Connection refused
  • 有时候需要等很长时间才能最终输出ssh_exchange_identification: read: Connection reset by peer After retry: Connection refused

返回 RPi似乎什么都没有改变:

$ screen -r      # to get the ssh window
[email protected]~$ ssh -p 2255 pi@localhost
ssh: connect to host localhost port 2255: Connection refused

目前,对于所有这些测试,我都使用 Teamviewer 远程管理 RPi。出于某些原因,除非绝对必要,否则我不想在将来使用它。这就是我需要 SSH 隧道的原因。

哪里出了问题?如何让隧道可靠地工作?

相关内容