2009-12-22 94 views
1

我正在開發一個具有交互式telnet管理控制檯的系統。要求規定我們禁用telnet訪問並添加SSH。將管理控制檯更改爲我們可用於SSH登錄的獨立程序需要供應商參與。我在想一個更便宜的解決方案,將是這樣的:將SSH登錄會話重定向到交互式telnet到本地主機

  1. 阻止從外部訪問的telnet管理控制檯,但離開它運行供本地主機連接。

  2. 編寫一個用作代理的登錄shell(使用C++,或者像this那樣簡單,如果幸運的話)。登錄shell將telnet到本地主機,並通過telnet發送它從用戶接收到的所有命令,併發送所有顯示並提示從遠程登錄服務器接收的返回給用戶。

  3. 更改/ etc/passwd以在用戶通過ssh登錄時啓動此代理shell。

我在想什麼?是否有可怕的陷阱,我會卡住?有更好的選擇嗎?我使用OpenSSH作爲ssh守護進程。

回答

4

限制Telnet到本地連接聽起來像一個很好的計劃,特別是如果你不想觸摸代碼。不過,步驟2和3是不必要的。建立連接後,您可以簡單地在遠程shell中調用「telnet」命令。這可以通過在用戶的主目錄中創建一個.ssh/rc腳本來自動完成。

但是,此方法的一個潛在問題是Telnet控制序列可能無法正確通過。所以另一種方法是通過使用端口轉發的安全SSH連接來隧道連接Telnet。通過這種策略,您將繼續在您的客戶端和服務器上運行Telnet,但使用SSH加密連接。要設置後,調用SSH客戶端這樣的:

ssh -L 23:localhost:23 [email protected] 

替換爲「用戶名@主機」與SSH服務器的用戶/主機。該命令的作用是打開客戶端中的端口23(telnet)。並且通過SSH將其連接到服務器上的端口23。因此,在您的客戶端上,您需要Telnet到本地主機,並將連接轉發到與SSH守護程序在同一個框中運行的Telnet服務器。

請注意,如果客戶端上的安全設置阻止您使用端口23,則可以將第一個「23」更改爲其他值(例如1123)。在這種情況下,您需要將Telnet客戶端指向localhost:1123或其他任何地方,並將其轉發到遠程系統的端口23。紅帽雜誌有一個good tutorial使用SSH端口轉發這樣的用例。

+0

好主意直接調用telnet而不需要寫代理。當我在/ etc/passwd中將admin用戶的shell替換爲它時,它運行良好。對我來說,遠程登錄控制序列通過了很好! – indiv 2010-01-14 23:05:13

相關問題