【问题标题】:How to ssh forwarding with AllowTcpForwarding set to no?如何在 AllowTcpForwarding 设置为 no 的情况下进行 ssh 转发?
【发布时间】:2018-05-06 23:55:57
【问题描述】:

有一些开发需要在某个远程机器上完成。幸运的是,我有 shell 访问权限,但我需要通过一个将 AllowTcpForwarding 设置为 false 的网关。

我看了一下文档,上面写着:

AllowTcpForwarding 指定是否允许 TCP 转发。这 默认为“是”。请注意,禁用 TCP 转发不会 提高安全性,除非用户也被拒绝 shell 访问,因为他们 可以随时安装自己的转发器。

我将如何安装(或构建)我自己的转发器?我的目标是通过 SSH 设置 remote interpreter using Pycharm 并将其绑定到某个本地端口,通过 ssh 提供数据,通过网关,然后到实际运行代码的开发框。

我知道我可以通过以下方式 ssh 到我的远程盒子:

ssh -t user1@gateway ssh user2@devbox

但显然这个选项在 pycharm 中不可用。我必须能够打开一些本地端口,以便

ssh -p 12345 localhost
(or variant)

会将我连接到 user2@devbox。这将允许我将远程解释器配置为使用localhost 上的端口12345 连接到远程盒子。

【问题讨论】:

  • SO 是针对编程问题,而不是关于使用或配置 Linux 的问题。 SuperUser.com 或 unix.stackexchange.com 将是解决此类问题的更好地方。
  • 标题写着AllowTcpForwarding,问题指的是AllowAgentForwarding

标签: linux git shell ssh portforwarding


【解决方案1】:

如果您有合法的需要通过此网关服务器建立隧道连接,您应该尝试与网关管理员交谈,以找到一种可接受的方式来完成您的工作。找到解决服务器配置的方法不会改变您可能违反了您应该遵守的政策这一事实。话虽如此:

客户端和服务器之间的 SSH 连接支持多个独立的数据流,称为通道。端口转发使用称为"direct-tcpip" 的通道类型。一个端口转发操作有四个部分:

  1. ssh 客户端(连接到 ssh 服务器)绑定到 TCP 端口并侦听连接。
  2. 当有东西连接到客户端正在侦听的端口时,客户端会向服务器发送请求以打开“direct-tcpip”通道。来自客户端的请求指定了通道应连接的主机和端口。
  3. 远程系统上的 ssh 服务器与指定的主机和端口建立 TCP 连接。
  4. ssh 客户端在直接 tcpip 通道和本地 TCP 连接之间中继数据。
  5. ssh 服务器在直接 tcpip 通道和远程 TCP 连接之间中继数据。

如果服务器已配置为不允许 TCP 转发,那么它将以错误响应来自客户端的任何直接 tcpip 通道请求。为了解决这个问题,正如 SSH 文档所暗示的那样,客户端需要通过允许客户端打开的某些其他通道类型传递这些转发请求,并且它需要在执行步骤 3 和 5 的远程系统上运行一些进程以上——通常由远程 ssh 服务器完成的步骤。

我不知道任何现成的解决方案。这里的工作范围是:

  1. 开发一个可以安装在网关上的程序,以执行转发操作的远程部分。该程序必须能够与目标主机和端口建立 TCP 连接,然后在 TCP 连接和 SSH 连接之间中继数据。

  2. 开发一个可以执行转发操作的本地部分的自定义 ssh 客户端。它需要绑定到本地 TCP 端口并侦听连接。当有东西连接时,客户端必须打开一个到服务器的通道,调用远程程序连接到隧道目标,然后在 TCP 连接和 ssh 通道之间中继数据。

一个可行的方法是让自定义 ssh 客户端为每个转发的连接打开一个"exec" or "shell" 通道,然后在远程系统上调用类似netcat 的程序。 Netcat 需要连接到转发操作的目标,然后在其标准输入/输出和转发目标之间中继数据。如果您无法在网关上安装 netcat,您可以使用 perl、python、java、C 或网关上可用且允许打开 TCP 连接的任何其他语言为此目的编写自定义程序。

【讨论】:

  • 这是一篇内容丰富的帖子。感谢您提供全面的信息。
【解决方案2】:

网关上可能安装了一些程序,可用于将 stdio 转发到远程网络端口。例如,查找 corkscrewnetcatncsocatproxytunnel

那么如果 Perl 在网关上可用,您可以使用我前段时间写的 here 提供的单行代码来解决同样的问题(代码解释为 here)。

最后,您还可以使用 ProxyCommand 设置或 PyCharm 使用的一些等效设置运行与目标计算机的 SSH 连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多