需要在某个远程框上完成一些开发。幸运的是,我有shell访问权限,但是我需要通过允许将设置为false的网关进行。
我在文档上达到顶峰,它说:
允许TCPForwarding指定是否允许TCP转发。这 默认值为"是"。请注意,禁用TCP转发不会 提高安全性,除非用户也被拒绝访问Shell的访问权限 始终可以安装自己的转发器。
我将如何安装(或构建)我自己的货车?我的目标是通过SSH使用Pycharm设置远程解释器,并将其绑定到某些本地端口,该端口通过SSH,通过网关馈送数据,然后到达代码实际运行的开发框。
我知道我可以通过:
来ssh到我的远程盒子ssh -t user1@gateway ssh user2@devbox
但是显然,Pycharm中没有此选项。我必须能够打开一些本地端口,以便
ssh -p 12345 localhost
(or variant)
将我连接到User2@devbox。这将允许我配置远程解释器以使用localhost
上的端口12345
连接到远程框。
如果您有合法的需要通过此网关服务器隧道连接,则应尝试与网关管理员交谈,以找到一种可接受的方法来完成您的工作。找到一种围绕服务器配置的方法并不会改变您可能会遵循的策略的事实。话虽如此:
客户端和服务器之间的SSH连接支持多个独立的数据流,称为通道。端口转发使用称为" Direct-TCPIP"的频道类型。端口转发操作有四个部分:
- SSH客户端(已连接到SSH服务器)绑定到TCP端口并收听连接。
- 当某些东西连接到客户端正在收听的端口时,客户端将请求向服务器发送请求以打开" Direct-tcpip"渠道。客户端的请求指定频道应连接到的主机和端口。
- 远程系统上的SSH服务器与指定的主机和端口建立了TCP连接。
- SSH客户端在直接-TCPIP频道和本地TCP连接之间中继数据。
- SSH服务器在直接TCPIP频道和远程TCP连接之间中继数据。
如果服务器已配置为不允许TCP转发,则它将对客户端的任何直接TCPIP频道请求响应。为了解决此问题,正如SSH文档所暗示的那样,客户需要通过允许客户端打开的其他频道类型传递这些前进请求,并且需要在执行步骤3和5的远程系统上运行一些过程以上 - 通常由远程SSH服务器完成的步骤。
我不知道为此有任何现成的解决方案。这里的工作范围是:
-
开发一个程序,您可以在网关上安装,以执行转发操作的远程部分。该程序必须能够建立与目标主机和端口的TCP连接,然后在TCP连接和SSH连接之间中继数据。
-
开发一个可以执行远期操作的本地部分的自定义SSH客户端。它需要绑定到本地TCP端口并聆听连接。当某物连接时,客户端将必须打开服务器的通道,调用远程程序以连接到隧道目标,然后在TCP连接和SSH频道之间中继数据。
一种合理的方法将使自定义SSH客户端打开" exec"或" shell"通道的每个转发连接,然后调用远程系统上的NetCat之类的程序。NetCAT需要连接到远期操作的目标,然后在其标准输入/输出和向前目标之间中继数据。如果您不能在网关上安装NetCat,则可以使用Perl,Python,Java,C或网关上任何其他可用的语言编写自定义程序,并允许打开TCP Connections。
。可能在网关上安装了一些程序,您可以用来将STDIO转发到远程网络端口。例如,查找corkscrew
,netcat
,nc
,socat
或proxytunnel
。
然后,如果在网关上有Perl可用,您可以使用我以前写过的单线可用来解决此相同的问题(此处解释了代码)。
最后,您也可以使用ProxyCommand
设置或Pycharm使用的一些等效设置来运行与目标计算机的SSH连接。