paramiko.ssh_exception.SSHException:TCP转发请求被拒绝

时间:2015-06-19 14:14:08

标签: ssh paramiko

我正在使用paramiko的rforward.py演示脚本,它演示了反向SSH隧道的工作原理。该代码包含以下行:
transport.request_port_forward('', server_port)

当我运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "C:\Users\Name\Documents\bh_python\rforward.py", line 167, in <modul
e>
    main()
  File "C:\Users\Name\Documents\bh_python\rforward.py", line 160, in main
    reverse_forward_tunnel(options.port, remote[0], remote[1], client.get_transp
ort())
  File "C:\Users\Name\Documents\bh_python\rforward.py", line 73, in reverse
_forward_tunnel
    transport.request_port_forward('', server_port)
  File "build\bdist.win32\egg\paramiko\transport.py", line 775, in request_port_
forward
paramiko.ssh_exception.SSHException: TCP forwarding request denied

以下是有问题的transport.request_port_forward代码:

def request_port_forward(self, address, port, handler=None):
        if not self.active:
            raise SSHException('SSH session not active')
        port = int(port)
        response = self.global_request('tcpip-forward', (address, port), wait=True)
        if response is None:
            raise SSHException('TCP forwarding request denied')
        if port == 0:
            port = response.get_int()
        if handler is None:
            def default_handler(channel, src_addr, dest_addr_port):
                #src_addr, src_port = src_addr_port
                #dest_addr, dest_port = dest_addr_port
                self._queue_incoming_channel(channel)
            handler = default_handler
        self._tcp_handler = handler
        return port`

好像我的系统拒绝了端口转发的请求。我该如何验证并解决问题?我在Windows 7上运行。

2 个答案:

答案 0 :(得分:1)

这听起来好像在服务器上被阻止了。虽然我对Windows不太熟悉,但我相信应该可以安装SSH命令行客户端,并尝试使用ssh客户端复制您在Paramiko中所做的事情。如果它适用于SSH客户端,您知道代码存在问题。否则,您将遇到服务器配置问题。

答案 1 :(得分:0)

这恰好发生在我身上,如果您尝试移植的机器不希望转发它转发的端口,通常会出现这种错误。

  1. 它可能是您要转发的计算机上的保留端口(即&lt; 1024)
  2. 它可能是一个已经在监听的端口(你是否有另一个程序运行实例,如果你可以在服务器上获得netstat -an,你可能会在那里看到那个端口)
  3. 您可以使用selinux(或其他安全)策略阻止您登录的用户
  4. Paramiko阻止我的原因完全不同于我提出的这三个原因。 paramiko docs的代码非常好,但需要一些改进来处理错误。

    你应该处理那个错误,如果第一次不能正常工作,可以再试一次。