2009-12-22 49 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

相关问题