我想做的是启用覆盆子,物理放置在客户的站点中,有互联网接入通过动态IP,从野外接收 SSH 命令无需操作客户端的路由器和防火墙。该网络上不允许入站连接,而且客户站点的互联网地址是动态的。
编辑: 要知道这个问题的解决办法,可以参考以下的回复凯文·金赛和弗洛林·戈达尔,或者滚动到问题末尾,了解如何让它在非标准 SSH 端口 22 上工作。
我已经尝试研究并理解提议的内容Unix Stack Exchange 上的 ssh 到 private-ip,但我实在没明白重点。
我确实想从我的,比如说,笔记本电脑, 到客户的VPS服务器,并让VPS服务器连接到覆盆子SSH。所以:
( firewall access allow in+out )
| => VPS Server \ ( firewall access allow out only )
| | => Raspberry
MY PC /
这是一个案例场景使用给定的 IP 地址、端口和名称配置:
MY PC
name: [email protected]
Client VPS Server
name: remote.null.tld
IP Address: 98.76.54.32
SSH Port: 9876
Raspberry
model: Zero W
name: [email protected]
IP Address: dynamic IP ( based on Internet Provider )
SSH Port: 6789
Raspberry's iptables: empty
Router's Firewall Restrictions: allow only out
Internet stability: very low
Raspberry 的外部 IP 是由互联网提供商分配的,并且可能会根据路由器重新启动而变化。无法绝对确定。
客户端网络上的 Internet 访问是真的不稳定。无线电链接或类似的东西。不管怎样,互联网连接的带宽非常不稳定。
另外,客户的路由器无法被操纵,不是因为懒惰,而是因为客户 IT 部门施加的限制。
我确实可以通过 SSH 访问客户端的 VPS,并且可以在其上安装任何软件。
编辑:问题的解决方案
在我的配置中,端口是非标准的。所以,解决方案是这样的:
在覆盆子上:
# login to [email protected] is done via private/public key with no passwords
ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected]
在 Raspberry 的 crontab 上:
# A re-connect is performed at every 10th minute of every hour to prevent accidental tunnel breakdowns.
10 * * * * ps -ef | grep 'ssh -p 9876 -f -N -T -R' | grep -v grep | awk '{print $2}' | xargs -r kill -9 && sleep 30s && ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected] >/dev/null 2>&1
桥上VPS远程 null.tld
ssh -p 55555 raspberry_username@localhost
或者,通过修改 VPS 的 ssh 配置来提供更优雅的解决方案:
Host tunnelToRemoteRaspberry
Hostname localhost
User raspberry_username
Port 55555
答案1
我假设remote
VPS 和pi
树莓派上的用户名。
- 您在 VPS 上选择一个免费端口。低于 65000 的随机五位数值应该有效。
在树莓派上,你运行
ssh -R PORT:localhost:22 remote@vps
在 VPS 上,您可以使用以下命令连接到 Raspberry
ssh -p PORT pi@localhost
将 PORT 替换为您在第一步中选择的端口。
在步骤 2 中,您创建一条从 VPS 上的 PORT 到 Raspberry 上的端口 22 的反向隧道,这是 Raspberry 的 SSH 服务器侦听的位置。在步骤 3 中,您连接到 VPS 上的端口并转移到 Raspberry 上的端口 22。
然后,您可以在 VPS 的 ~/.ssh/config 中配置连接,例如:
Host raspberryTunnel
Hostname localhost
User pi
Port PORT
如果工作可靠,您可以用 autossh 替换 Raspberry 上的单个 SSH 连接,它会在连接断开时自动重新创建连接。
autossh -R PORT:localhost:22 remote@vps
答案2
这个有可能。使用“反向端口转发”。您可能需要设置一个 cronjob 来检查它是否已连接。如果没有,请运行如下命令:
ssh -f -N -T -R 2210:localhost:22 [email protected]
“示例.com”是您有权访问的固件之外的某个服务器。您将 RPi 上的端口 22 转发到 上的端口 2210 example.com
。然后您可以通过 SSH 登录 example.com 并执行以下操作:
ssh RaspberryUser@localhost -p 2210
您将连接到 RPi 盒。
答案3
答案4
如果 Pi 防火墙不允许传入连接,则无法建立连接。唯一的方法是使用已建立的连接来穿过防火墙。