2010-08-05 104 views
2
连接

已经有周围的地方像这样的一些问题,但没有一个真正回答我的问题明确。(例如Connecting to device behind firewall设备防火墙后面通过ssh

我要的是一个中央服务器,接收心跳来自个人防火墙后面的多个(比如说100个)嵌入式设备。这些设备需要能够做两件事。

  1. 从服务器获取新配置。我 怀疑我可以通过一个 HTTP从设备到 服务器,并拉下一些XML,然后 重新加载自己的配置。
  2. 打开ssh连接到服务器 以允许管理员登录到该设备的 命令行和做 维护和故障排除 remotely.ie设备=>服务器< = admin和管理员可以得到bash命令行或同等学历。

该设备是低功耗嵌入式设备,将运行Linux。 python中的解决方案会更可取(我想为ssh考虑paramiko的问题),但我可以向其他解决方案开放。最主要的是在专网中不会有技术用户,所以它应该能够插入到消费级的ADSL调制解调器,获得一个DHCP地址,所有这些都应该可以工作。我可以事先用任何东西预先装载设备,例如无密码ssh等的ssh证书。

有人有什么想法吗?

干杯

马克

回答

2

您可以设置SSH隧道(从Python脚本或控制台):

ssh -NR10022:localhost:22 [email protected] 

然后,您只需登录到主服务器,然后ssh [email protected] -p 10022

你应该有ssh密钥,所以你不必输入密码(谷歌关于“没有密码的ssh”)。

+0

在ssh上隧道ssh似乎不幸。 – sarnold 2010-08-05 07:16:30

+0

@sarnold,我认为这实际上更像是插入一个SSH连接到另一个?不是这种情况? – 2010-08-05 07:43:44

+0

@sarnold:任何更好的想法? @Mark Underwood。实际情况是,该命令创建从服务器上的10022端口到嵌入式设备上的22端口的ssh隧道。所以如果你发送数据到10022它将被转移到ssh到嵌入式设备。 sarnold事实上是正确的。如果你在10022上创建ssh连接,它将会存在于ssh隧道(另一个ssh连接)中。但是,这没有错。事实上,很难找出更好的解决方案。 – 2010-08-05 13:52:05

0

更复杂的方法可能是某种类型的firewall hole punching

虽然第二,但也许这不是必要的,因为只涉及一个防火墙。诀窍是让你的嵌入式设备首先发起一个出站连接。

+0

我想我有一个打开出站连接的解决方案。由于设备轮询新配置数据,如第1点所述,我们应该能够触发它来打开一个ssh端口。 – 2010-08-06 02:27:53