1

我正在为具有交互式 telnet 管理控制台的系统进行开发。要求要求我们禁用 telnet 访问并改为添加 SSH。将管理控制台更改为可用于 SSH 登录的独立程序需要供应商参与。我正在考虑一个更便宜的解决方案,就像这样:

  1. 阻止 telnet 管理控制台从外部访问,但让它运行可用于 localhost 连接。

  2. 编写一个充当代理的登录 shell(在 C++ 中,或者如果我幸运的话,也可以像这样简单)。登录 shell 将 telnet 到 localhost 并通过 telnet 发送它从用户接收到的所有命令,并将它从 telnet 服务器接收到的所有显示和提示发送回用户。

  3. 更改 /etc/passwd 以在用户通过 ssh 登录时启动此代理 shell。

我想的可能吗?是否有可怕的陷阱让我陷入困境?有更好的选择吗?我使用 OpenSSH 作为 ssh 守护进程。

4

1 回答 1

4

将 Telnet 限制为本地连接听起来是个不错的计划,尤其是在您不想接触代码的情况下。不过,第 2 步和第 3 步是不必要的。建立连接后,您可以简单地在远程 shell 中调用“telnet”命令。这可以通过在用户的主目录中创建一个.ssh/rc脚本来自动完成。

但是,这种方法的一个潜在问题是 Telnet 控制序列可能无法正确通过。因此,另一种方法是通过使用端口转发的安全 SSH 连接来隧道 Telnet 连接。使用此策略,您将继续在客户端和服务器上运行 Telnet,但连接使用 SSH 加密。要进行设置,请像这样调用 SSH 客户端:

ssh -L 23:localhost:23 user@host

将“user@host”替换为 SSH 服务器的用户/主机。该命令的作用是打开客户端机器上的 23 端口(telnet) 。与之建立的连接将通过 SSH转发到服务器上的 23 端口。因此,在您的客户端上,您将 Telnet 到 localhost,并且连接将被转发到与 SSH 守护程序在同一个机器上运行的 Telnet 服务器。

请注意,如果客户端上的安全设置阻止您在那里使用端口 23,您可以将第一个“23”更改为其他值(例如 1123)。在这种情况下,您将 Telnet 客户端指向 localhost:1123 或其他任何内容,它将被转发到远程系统上的端口 23。Red Hat Magazine 有一个很好的教程,介绍如何将 SSH 端口转发用于此类用例。

于 2009-12-22T19:02:55.587 回答