如何设置 sshtunnel 的连接超时

Mik*_*ael 4 python ssh-tunnel

我在 python 上使用 sshtunnel 模块中的 SSHTunnelForwarder 。

给出下一个代码:

server = SSHTunnelForwarder(
    (sshServer, sshPort),
    ssh_username=sshUsername,
    ssh_password=sshPassword,
    remote_bind_address=(imapServer, imapPort),
    local_bind_address=('127.0.0.1', localPort)
)

print('STARTING')

server.start()

print(server.is_active)
Run Code Online (Sandbox Code Playgroud)

有时需要很长时间,也许几分钟,然后我会收到错误:

2019-04-22 22:25:54,365| ERROR   | Could not connect to gateway ip..... : 110
Traceback (most recent call last):
  File "PYTHON_TUNNEL.py", line 24, in <module>
    server.start()
  File "/home/mike/.local/lib/python2.7/site-packages/sshtunnel.py", line 1295, in start
    reason='Could not establish session to SSH gateway')
  File "/home/mike/.local/lib/python2.7/site-packages/sshtunnel.py", line 1101, in _raise
    raise exception(reason)
sshtunnel.BaseSSHTunnelForwarderError: Could not establish session to SSH gateway
Run Code Online (Sandbox Code Playgroud)

Ubuntu 18.04、Python 2.7

是否可以设置隧道建立超时?

shm*_*mee 6

在套接字上设置了一个SSH_TIMEOUT默认值为Nonein的常量,用于在调用之前创建传输sshtunnel.pyconnect

不幸的是,我无法自己测试这一点,但您可以在启动隧道转发器之前尝试修补该常量:

import sshtunnel

sshtunnel.SSH_TIMEOUT = 5.0

server = sshtunnel.SSHTunnelForwarder([...])    
server.start()
Run Code Online (Sandbox Code Playgroud)

还有一个TUNNEL_TIMEOUT常量,但它似乎用于检查隧道是否已建立以及调用open_channel底层的 Paramiko Transport 实例。它似乎在隧道创建过程中没有发挥作用。
另外,TUNNEL_TIMEOUT默认设置为一秒,并且在引发server.start()之前您会遇到一分钟长的延迟BaseSSHTunnelForwarderError,因此该常量似乎不太可能与您的问题的解决方案相关。