2012-07-03 44 views
11

我想通過網絡提供一個串行端口。 RFC-2217提供對Telnet的擴展,以傳輸額外的串行端口信息,例如速度,數據位,停止位和硬件握手線。協議爲遠程串行端口,與認證和加密

但是,我想確保它不是對網絡上任何人都可以自由訪問的,所以我想要進行身份驗證和加密。 Telnet在身份驗證方面較弱,不提供加密。 SSH通常比Telnet更受歡迎。

是否有任何協議允許通過SSH進行串口傳輸,類似於RFC-2217

我意識到一個選項可能是通過SSH隧道隧道Telnet + RFC-2217。這在技術上是可行的,但實際上它有點尷尬。

零配置

另一個問題是,怎麼會這樣的端口與零配置DNS-SD公佈?例如。 Telnet + RFC-2217串行端口(通過SSH傳輸)如何能夠通過Zeroconf進行廣告? (普通的Telnet + RFC-2217可以從我可以告訴被標榜爲_telnetcpcd._tcp

+0

任何理由不只是兩端運行膩子? http://superuser.com/questions/270793/connect-two-computers-together-via-a-rs232-serial-port –

+0

這是一個利基無線電通信應用程序,我想使PC連接到無線電調制解調器通過本地網絡進行撥號訪問。然後客戶端PC將使用虛擬串行端口,並使用通常的AT命令撥打數據電話。 –

+0

通過SSH的RFC2217,正如您所建議的,聽起來像是完美的解決方案。我不確定它有什麼尷尬......看起來很合適。 – Brad

回答

3

你想要的是一個安全的串行LAN連接。

你沒有找到任何這樣做的免費項目的原因很簡單 - 大多數開源項目將協議中的傳輸層安全性分開(出於很好的理由)。您可以重新使用安全組件(本例中爲SSH)並將其應用於您的不安全協議(例如,與RFC-2217兼容),而不是爲每個應用程序重新設計輪子。

只需使用SSH隧道或stunnel來保護連接。對於Windows客戶端,您可以使用com2com和* nix系統,如ttyd。例如,在初始設置後,甚至不需要手動啓動,因此用戶只需建立SSH隧道(例如通過PuTTY)。

  • com2com
  • socat,使用ptyopenssl-listen,你可以做很多你想要什麼(略違背了我上面寫的,因爲它實際上實現傳輸層安全)
4

我不知道SSH隧道是尷尬的,你想:

-W主機:端口
請求將客戶端上的標準輸入和輸出通過安全通道轉發到端口上的主機。意味着-N-TExitOnForwardFailureClearAllForwardings,並與協議版本2只適用。

下面是隧道很短的SMTP會話的樣子(黑體打字輸入):

$ ssh -W mail.server.com:25 [email protected] 
220 mail.server.com ESMTP 
Postfix 
ehlo foo.com 
250-mail.server.com 
250-PIPELINING 
250-SIZE 
250-ETRN 
250-AUTH LOGIN PLAIN 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 
quit 
221 2.0.0 Bye 

沒有單獨設置了一個隧道,然後連接到該端口,只是管道從SSH的輸入和輸出處理。

0

SSH規定"requesting a pseudo-terminal""pseudo-terminal encoded terminal modes"。它提供了設置波特率,位,奇偶校驗,停止位配置。可以設置PARMRK以接收組幀錯誤和中斷情況。然而,SSH協議似乎目前缺少設置中斷條件的任何命令,或者設置DTR和RTS調制解調器硬件線路,或者獲得DSR,CTS,DCD和RING調制解調器硬件線路。

請參見: