代码之家  ›  专栏  ›  技术社区  ›  indiv Olivier Poulin

让ssh登录会话改为重定向到本地主机的交互式telnet

  •  1
  • indiv Olivier Poulin  · 技术社区  · 16 年前

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

    1. 阻止外部访问telnet管理控制台,但让其运行以供本地主机连接使用。

    2. 写一个登录shell(C++),或者简单的 this 如果我运气好的话)那就是代理人。登录shell将telnet发送到localhost,并通过telnet将从用户收到的所有命令发送给用户,并将从telnet服务器收到的所有显示和提示发送给用户。

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

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

    1 回复  |  直到 16 年前
        1
  •  4
  •   Rob H    16 年前

    限制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。因此,在您的客户机上,您将telnet发送到localhost,并且连接将转发到与ssh守护进程在同一个框中运行的telnet服务器。

    请注意,如果客户机上的安全设置阻止您在其中使用端口23,则可以将第一个“23”更改为其他内容(例如1123)。在这种情况下,您可以将telnet客户机指向localhost:1123或其他任何位置,它将被转发到远程系统上的端口23。红帽杂志有一个 good tutorial 对于类似的用例使用ssh端口转发。