如何使用python';连接到仅运行telnet的路由器的sshtunnel?

如何使用python';连接到仅运行telnet的路由器的sshtunnel?,python,ssh,ssh-tunnel,telnetlib,Python,Ssh,Ssh Tunnel,Telnetlib,我必须连接到jumpserver,才能连接到一堆只运行telnet的路由器。我不熟悉SSH隧道,但我发现在本地计算机的命令行上,以下命令构成了必要的隧道: $ ssh -fNL 2300:remote_host:23 user@jumpServer 然后,我所要做的就是连接到本地计算机上的端口2300,以便将流量转发到路由器上的端口23(该路由器没有SSH,只有telnet): 我有几个问题: 实际的隧道在哪里形成?正如我所说,路由器的端口22被阻塞了,也就是说,它不能运行SSH。但是,我的本

我必须连接到jumpserver,才能连接到一堆只运行telnet的路由器。我不熟悉SSH隧道,但我发现在本地计算机的命令行上,以下命令构成了必要的隧道:

$ ssh -fNL 2300:remote_host:23 user@jumpServer
然后,我所要做的就是连接到本地计算机上的端口2300,以便将流量转发到路由器上的端口23(该路由器没有SSH,只有telnet):

我有几个问题:

  • 实际的隧道在哪里形成?正如我所说,路由器的端口22被阻塞了,也就是说,它不能运行SSH。但是,我的本地计算机和网关/跳线服务器可以。那么,如果我的本地机器和跳转服务器之间正在形成隧道,那么跳转服务器和路由器之间的传输模式是什么
  • 如果我理解正确,我的本地机器上的2300端口上有一个侦听器,它通过SSH隧道将所有流量转发到跳转服务器上的某个端口,然后转发到路由器。对吧?
  • [Python特定问题]如何让
    sshtunnel
    模块以编程方式执行此操作?我尝试了以下方法:
  • 但是,这会引发以下错误:

    回溯(最近一次呼叫最后一次): 文件“C:/Users/somsinha/PycharmProjects/SysTEst/sshTunnelTest.py”,第14行,在 Telnet(js,tunnel.local_bind_port,10)作为tn:

    文件“C:\Users\somsinha\bin\WPy64-3741\python-3.7.4.amd64\lib\telnetlib.py”,第218行,位于init self.open(主机、端口、超时)

    文件“C:\Users\somsinha\bin\WPy64-3741\python-3.7.4.amd64\lib\telnetlib.py”,第234行,处于打开状态 self.sock=socket.create_连接((主机、端口),超时)

    文件“C:\Users\somsinha\bin\WPy64-3741\python-3.7.4.amd64\lib\socket.py”,第727行,位于create\u connection中 提出错误

    文件“C:\Users\somsinha\bin\WPy64-3741\python-3.7.4.amd64\lib\socket.py”,第716行,位于create\u connection中 sock.connect(sa)

    ConnectionRefusedError:[WinError 10061]无法建立连接,因为目标计算机主动拒绝了它


    如何制作python
    ssh-fnl2300:remote_host:23user@jumpServer
    手动?

    除了在telnet中使用“localhost”之外,您的代码一切正常:

    from sshtunnel import open_tunnel
    from telnetlib import Telnet
    
    js = '123.456.555.666'
    js_usr = "user"
    rem_host = '123.456.789.101'
    
    with open_tunnel(
        ssh_address_or_host=(js, 22),
        ssh_username=js_usr,
        ssh_password="password",
        remote_bind_address=(rem_host, 23)
    ) as tunnel:
       # Use localhost as host
        with Telnet('localhost', tunnel.local_bind_port, 10) as tn:
            tn.interact()
    

    原因是该端口被转发到本地主机,必须从该端口访问。

    对于您的问题1和2,您是对的。要在Python中实现这一点,请使用telnet lib()中的示例2。@Karioki在我的例子中,您能用IPs修改示例吗?我有点困惑应该在哪里使用哪个IP。
    from sshtunnel import open_tunnel
    from telnetlib import Telnet
    
    js = '123.456.555.666'
    js_usr = "user"
    rem_host = '123.456.789.101'
    
    with open_tunnel(
        ssh_address_or_host=(js, 22),
        ssh_username=js_usr,
        ssh_password="password",
        remote_bind_address=(rem_host, 23)
    ) as tunnel:
        with Telnet(js, tunnel.local_bind_port, 10) as tn:
            tn.interact()
    
    from sshtunnel import open_tunnel
    from telnetlib import Telnet
    
    js = '123.456.555.666'
    js_usr = "user"
    rem_host = '123.456.789.101'
    
    with open_tunnel(
        ssh_address_or_host=(js, 22),
        ssh_username=js_usr,
        ssh_password="password",
        remote_bind_address=(rem_host, 23)
    ) as tunnel:
       # Use localhost as host
        with Telnet('localhost', tunnel.local_bind_port, 10) as tn:
            tn.interact()