Python: 远程服务器宕机后自动重新连接 ssh 隧道
Python: Automatically reconnect ssh tunnel after remote server gone down
我在 Python 中实现了建立 ssh 隧道的功能,因此我可以在 NAT 后面的数据库中插入数据(没有可用的端口转发)。
import paramiko
from sshtunnel import SSHTunnelForwarder
def fnc_ssh_tunnel():
try:
sshServer = SSHTunnelForwarder(
(SSH_IP, SSH_PORT),
ssh_username = SSH_USER,
ssh_password = SSH_PASS,
set_keepalive = float(SSH_KEEP_ALIVE),
remote_bind_address = (DB_IP, DB_PORT),
)
sshServer.start()
localPort = sshServer.local_bind_port
logPrint("SSH Tunnel Started to " + str(sshServer.tunnel_bindings), DEBUG_ID)
sshServer.check_tunnels()
return localPort
except Exception as e:
logPrint("Error SSH Tunnel", DEBUG_ID)
logPrint(e,DEBUG_ID)
quit()
现在,这工作得很好。有了这个实现,我稍后会在 localhost:localport
上建立到数据库的连接(localport
由 fnc_ssh_tunnel()
返回)。
如果由于某种原因,数据库所在的远程 PC 重新启动,就会出现问题。如果是这样,PC 上的 SSH 服务器将断开所有连接,因此我的 ssh-tunnel 也会断开。
要从那种情况中恢复,我需要重新启动 Python 程序:这样,隧道将重新建立。
如果远程服务器出现故障 -> 启动,是否有重新建立 ssh 隧道的巧妙方法?
谢谢!
我遇到了同样的问题,这是我的解决方案:
启动服务器后,不断检查服务器是否处于活动状态,如果不是,请重新启动。
def get_server():
# define ssh server and return it
server = get_server()
server.start()
while True :
if(server.is_active):
print("alive... " + (time.ctime()))
else:
print("reconnecting... " + time.ctime())
server.stop()
server = get_server()
server.start()
time.sleep(60)
我在 Python 中实现了建立 ssh 隧道的功能,因此我可以在 NAT 后面的数据库中插入数据(没有可用的端口转发)。
import paramiko
from sshtunnel import SSHTunnelForwarder
def fnc_ssh_tunnel():
try:
sshServer = SSHTunnelForwarder(
(SSH_IP, SSH_PORT),
ssh_username = SSH_USER,
ssh_password = SSH_PASS,
set_keepalive = float(SSH_KEEP_ALIVE),
remote_bind_address = (DB_IP, DB_PORT),
)
sshServer.start()
localPort = sshServer.local_bind_port
logPrint("SSH Tunnel Started to " + str(sshServer.tunnel_bindings), DEBUG_ID)
sshServer.check_tunnels()
return localPort
except Exception as e:
logPrint("Error SSH Tunnel", DEBUG_ID)
logPrint(e,DEBUG_ID)
quit()
现在,这工作得很好。有了这个实现,我稍后会在 localhost:localport
上建立到数据库的连接(localport
由 fnc_ssh_tunnel()
返回)。
如果由于某种原因,数据库所在的远程 PC 重新启动,就会出现问题。如果是这样,PC 上的 SSH 服务器将断开所有连接,因此我的 ssh-tunnel 也会断开。
要从那种情况中恢复,我需要重新启动 Python 程序:这样,隧道将重新建立。
如果远程服务器出现故障 -> 启动,是否有重新建立 ssh 隧道的巧妙方法?
谢谢!
我遇到了同样的问题,这是我的解决方案:
启动服务器后,不断检查服务器是否处于活动状态,如果不是,请重新启动。
def get_server():
# define ssh server and return it
server = get_server()
server.start()
while True :
if(server.is_active):
print("alive... " + (time.ctime()))
else:
print("reconnecting... " + time.ctime())
server.stop()
server = get_server()
server.start()
time.sleep(60)