监听 SSH 客户端

Listening SSH client

我正在寻找一个 SSH 等效(加密、终端访问、端口转发)系统,客户端可以在其中侦听传入连接。

有许多版本的 VNC,其中远程端可以作为侦听器启动,并由具有要共享的显示器的计算机连接。

我希望能够用 SSH 做同样的事情。先启动客户端,让它监听一个特定的端口,然后与服务器连接,并与客户端共享服务器的shell。

编辑:对于那些想知道我为什么会对这样的事情感兴趣的人:

这将部署用于消费级网络设备的远程技术支持。因此,对于那些怀有恶意的人来说,获取系统的登录凭证可能非常容易。 SSH 服务器是一个非常强大的应用程序。是的,它可以通过防止人们滥用访问权限的方式来保护,但是没有比在程序中不存在不需要的功能更安全的了。您不必担心忽略漏洞利用向量或错误输入配置以留下漏洞。 "listening" 客户会这样做。当大多数已发现的针对系统的攻击将仅影响 他们的 端时,攻击者的选择将变得非常有限。

我搜索此类内容的尝试因术语的通用性而混淆,因此我在这里问的原因。在这一点上,我猜测建立反向隧道的容易性导致对这种能力的兴趣不大,因此它不存在。这就是生活。

在这种情况下,设备已经包含连接转发组件。如果答案是 "no such thing exists" 那么我们可以以安全的方式将其搭载到其中;但考虑到还有大量其他需要做的事情,避免这些工作会很好。

最终编辑:

设置反向转发可能是对普通人来说最简单的事情,所以我将其标记为答案。我很确定可以使用 Python Twisted 框架的 ssh 功能来构建一个实现监听客户端的系统,但由于我将使用它来支持的应用程序已经涉及 NAT 遍历和端口转发我用起来更方便。

如果有人偶然发现这个问题想要 "backward" SSH 服务器,请随时发表评论,根据我的空闲时间,我会构建一个,或者让您与某人联系谁能为你建造一个。连接部分非常简单,它正在弄清楚如何在其中共享 shell,这比我目前有时间做的更棘手。

我会通过 ssh 端口转发解决这个问题,通过让您的客户端启动从他们的服务器到您设置的某个端点的出站连接来设置。这实际上是一种相当普遍的机制(我至少与过去以这种方式处理远程连接的主要存储供应商打交道)。

让您的客户 运行 像:

ssh -R 2200:localhost:22 support@your.endpoints.address

此时他们显然需要使用您提供给他们的密码或 ssh 密钥进行身份验证。

连接后,如果您在 your.endpoint.address 的系统上,您可以 运行:

ssh -p 2200 user@localhost

以用户 user 的身份连接到客户端发起连接的系统。这当然需要你有一些登录凭据。

从您的评论中我知道这不是您正在寻找的解决方案。

但我会重申我的观点。使用 ssh 端口转发。它确实是这项工作的工具。

以下是您的操作方式:

  • 为自己配置一个 DMZ 'ssh endpoint' 主机。为了加分,做几个虚拟机。
  • 为您的 DMZ ssh 端点设置防火墙,这样就不允许来自盒子的出站流量。
  • 对您的端点设置防火墙以限制 'incoming' 连接到 来自 'outside world' 的特定端口以及来自您的 'trusted' 的限制较少的列表网络。
  • 配置 chroot
  • 使用该 chroot 设置一个帐户。
  • 在你的 chroot 中放入一个写着 'ssh session connected' 或类似的脚本。
  • 在框上创建一个脚本,您的 支持 用户可以 运行(脚本或 Web 界面)'enable' 传入支持会话.
  • 您的 'create support session' 脚本:创建一个新用户名,生成一个 ssh public-私钥对,并分配一个端口号(为您的支持人员打印)。
  • authorized_keys 允许您指定 'permitted' 命令。
  • 如果您确实需要,可以在主机上使用 iptables 并显式启用来自特定远程 IP 地址的传入。 (如果你知道它们是什么!)

  • 然后将 'run ssh' 命令,包括捆绑的临时 ssh public 密钥放入一个数据包中,该数据包可以通过网络浏览器获取,然后由远程客户执行 'wget | sh' 或只是 'click this link and run it'。

  • 然后您的支持人员通过 ssh 进入您的服务器,并转发他自己的端口 - 转发他的本地端口,这样他就可以将他的客户端(VNC 等)指向固定位置(本地主机:端口)

  • 一旦您的支持会话结束,您的支持人员 运行 将使用另一个脚本(如果他们无法处理命令行,则通过菜单)来删除帐户并大功告成chroot 环境。 (如果相关则关闭防火墙规则)

您受到危害的风险很低,因为这是一个没有交互式登录和出站连接的 DMZ 主机。 (您可能希望允许它访问以获取补丁程序,但无论如何)。

它代理两个会话,但需要 结束到 'connect in' 这意味着当会话不活动时 'hack' 什么也没有。

并且因为您使用的是众所周知的 server/client/protocol,您可以获得开源提供的所有支持和维护。几乎可以肯定,这比您通过手动滚动代码来完成几乎相同的事情所获得的要多得多。

您不再依赖 'code solution' 来解决您的问题,而是技术基础设施。您还有可以很容易地检查 incoming/outgoing 流量的防火墙,使入侵检测变得非常容易。