2010-08-05 115 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