听SSH客户端

时间:2015-02-13 21:08:14

标签: ssh remote-access

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

有许多版本的VNC,远程端可以作为监听器启动,并由机器连接到将要共享的显示器。

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

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

这将用于消费级网络设备的远程技术支持。因此,对于具有恶意意图的人来说,获取系统的登录凭据可能非常容易。 SSH服务器是一个非常强大的应用程序。是的,它可以通过各种方式保护,防止人们滥用访问权限,但是您不能比程序中不存在不需要的功能更安全。您不必担心忽略漏洞利用矢量或以错误的方式填写配置以留下漏洞。 A"听"客户会做到这一点。当大多数发现的针对系统的漏洞利用仅影响他们的结尾时,攻击者的选项会受到严重限制。

我试图寻找这样的事情被这些术语的共性所困扰,因此我在这里问的原因。在这一点上,我猜测设置反向隧道的容易性导致对这种能力的兴趣不大,因此它不存在。 C' est la vie。

在这种情况下,设备已涉及连接转发组件。如果答案是"不存在这样的事情"然后我们可以以安全的方式将其捎带进去;但是,考虑到还需要做大量的其他事情,避免那些工作会很好。

最终编辑:

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

如果有人偶然发现这个问题谁想要一个"落后" SSH服务器,随时发表评论,并根据我的可用时间,我或者建立一个,或者让你联系可以为你建立一个的人。连接部分非常简单,它要弄清楚如何在它上面分享比现在有时间更难的shell。

2 个答案:

答案 0 :(得分:1)

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

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

以下是你将如何做到这一点:

  • 为自己配置DMZ的“ssh端点”主机。对于奖励积分,请制作几个虚拟机。
  • 对您的DMZ ssh端点进行防火墙,以便从该框中禁止出站流量。
  • 防火墙终端限制来自“外部世界”的特定端口的“传入”连接以及来自“可信”网络的略有限制的列表。
  • 配置chroot
  • 使用该chroot设置一个帐户。
  • 在你的chroot中输入一个脚本,上面写着'ssh session connected'或类似内容。
  • 在框中创建一个脚本,您的支持用户可以运行(脚本或Web界面),以“启用”传入的支持会话。
  • 您的“创建支持会话”脚本:创建一个新用户名,生成一个ssh公钥 - 私钥对,并指定一个端口号(为您的支持人员打印)。
  • authorized_keys允许您指定“允许”命令。
  • 如果您真的想要,可以在主机上使用iptables并明确启用来自特定远程IP地址的传入。 (如果你知道它们是什么!)

  • 然后将'run ssh'命令(包括捆绑的temp ssh公钥)放入一个数据包中,该数据包可以通过Web浏览器获取,然后由远程客户'wget |执行。 sh'或只是'点击此链接并运行它'。

  • 然后你的支持人员会进入你的服务器,然后自己的端口转发 - 转发他的本地端口,这样他就可以将他的客户端(VNC等)指向一个固定的位置(localhost:port)

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

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

它代理两个会话,但要求两个结束“连接”意味着当会话不活动时,没有什么可以“破解”。

由于您使用的是众所周知的服务器/客户端/协议,因此您可以获得开源提供的所有支持和维护。这几乎可以肯定比手动编码几乎完全相同。

您不再依赖于问题的“代码解决方案”,而是技术基础架构。您还可以使用防火墙轻松检查传入/传出流量,从而使入侵检测变得非常简单。

答案 1 :(得分:0)

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

让您的客户运行类似:

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

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

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

ssh -p 2200 user@localhost

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