Python:远程服务器宕机后自动重新连接ssh隧道

2024-01-13

我已经实现了一个在 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 隧道也将断开。

为了从这种情况中恢复,我需要重新启动 Python 程序:这样,隧道将重新建立。

如果远程服务器宕机->启动,是否有一种巧妙的方法来重新建立 ssh 隧道?

Thanks!


我面临同样的问题,这是我的解决方案:

启动服务器后,不断检查服务器是否处于活动状态,如果不是,请重新启动。

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:远程服务器宕机后自动重新连接ssh隧道 的相关文章

随机推荐

  • 如何将非消耗性订阅改为自动续订并保留老用户?

    我在 Apple Store 中有非消耗品定价的应用内购买功能 该应用程序的使用需要付费 如何将非消耗性订阅更改为自动续订订阅 以某种方式保留购买该应用程序的用户 新用户可通过自动续订订阅付费 不 你无法更改它 只需确保在你的应用程序中 你
  • android putextra 没有启动活动

    我需要帮助 我有两个活动和一个数据库 我想做的就是当我按下活动 A 中的按钮时 我将 editText 中的字符串发送到活动 B 在活动 B 中 我尝试将该字符串插入我的数据库中并将其显示在列表视图中 如果我在活动 A 中启动活动 B 则一
  • 如何让iOS应用程序与蓝牙连接?

    如何使用蓝牙制作iOS应用程序 我需要一个通过蓝牙与其他设备 例如笔记本电脑 连接并交换数据的应用程序 许多 BLE 软件包 但无法找到经典蓝牙的软件包 如果您想使用Apple iOS设备的经典蓝牙接口 您必须遵守 接受苹果的MFi htt
  • PHP:在线程之间共享静态变量

    我在 PHP 的不同线程之间共享静态变量时遇到问题 简而言之 我想要 1 在一个线程中写入静态变量 2 在其他线程中读取并进行所需处理并清理 为了测试上述要求 我编写了下面的 PHP 脚本
  • Guava 缓存“expireAfterWrite”似乎并不总是有效

    private Cache
  • 如何将 5000 多行从 google Analytics 导出到 Excel

    我正在尝试将 5000 多行从 google Analytics 导出到 Excel 工作表 但我无法这样做 我在谷歌上搜索了很多关于它的内容 并尝试了 url 修改来替换explorer table rowCount 3D5000 wit
  • Android Facebook 登录:如何在 XML 中没有 LoginButton 的情况下使用 LoginManager 检查登录情况

    我已经使用 LoginButton 在我的 Android 应用程序中完成了 facebook 登录检查 但我想使用 LoginManager 进行检查 我怎样才能修改我的代码以这种方式工作 LoginButton loginButton
  • 获取 Chrome 的当前区域设置

    我正在使用此 API 确定浏览器的当前区域设置 var language window navigator userLanguage window navigator language 此次回归 fr FR 在 IE 中 但它只返回 fr
  • 在 JavaScript 中从 DataURL 下载文件

    从 DataURL 获得的这个字符串中 将其下载为文件的最佳方法是什么 到目前为止我得到的是使用基本的window open myDataURL 但我无法以这种方式更改文件名 window open data application msw
  • Spring Boot 3 与 Lombok

    将我的项目从 Spring Boot 2 7 升级到 3 0 后 我得到 找不到标志 由于 Lombok 生成的代码而导致编译器错误 有什么方法可以让它协同工作 Spring Boot 3 和 Lombok 注释 您应该更新到 lombok
  • 右键单击以选择 Datagridview 中的一行并显示一个菜单以将其删除

    我的 DataGridView 中只有几列 而我的行中有数据 我在这里看到了一些解决方案 但我无法将它们组合起来 只需右键单击一行 它将选择整行并显示一个菜单 其中包含删除该行的选项 当选择该选项时 它将删除该行 我做了几次尝试 但都不起作
  • 了解 R 中的列表索引和括号约定

    我几乎了解 R 中的列表索引 但我有一些挥之不去的问题 具体来说 我试图了解使用多个索引来获取列表中的不同数据层 以及在每个数据类型的每个级别使用的括号类型 首先 我将展示一个简单的示例列表和我到目前为止的理解 Make an exampl
  • 向特定用户发送推送通知 - Laravel

    在我的 laravel 应用程序中 我想使用 Pusher 向特定用户发送通知 我将此代码放入我的方法中 pusher App make pusher pusher gt trigger notification channel notif
  • 从 HttpSessionListener 中获取用户名

    我想从内部获取用户名HttpSessionListener sessionCreated 当我说用户名时 我特指的是返回的名称HttpServletRequest getRemoteUser 显然 一定有一个HttpServletReque
  • System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出

    我正在使用 C net 和 SQL Server 2008 当尝试在我的项目中运行测试单元时 出现以下错误 System Data SqlTypes SqlTypeException SqlDateTime overflow Must be
  • 比较两个 CSV 并仅导出两者都不存在的名称列表

    我有 2 个带有用户名的 CSV 文件 我只想导出两个文件中都不存在的用户名 我现在的代码 file1 import csv Path C ps output adusers csv file2 import csv Path C ps o
  • HTML、jQuery:在图像映射区域显示文本

    我有一个像这样的图像映射 img src planets gif width 145 height 126 alt Planets
  • IIS Express——让 SSL 发挥作用

    我无法让 IIS Express 接受我正在开发的 VS2010 MVC3 项目的安全连接 我可以让它接受端口 80 上的不安全连接 但接受端口 443 上的不安全连接 根据谷歌搜索 我采取了以下步骤 1 通过在 VS2010 命令行上执行
  • 代码版本更改“规则”[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我知道关于软件版本控制没有固定的规则 但我有几个问题 1 如何正确升级版本 我有一个不久前开始使用的小软件 自从我从头开始以来 我从 0 1 版
  • Python:远程服务器宕机后自动重新连接ssh隧道

    我已经实现了一个在 Python 中建立 ssh 隧道的功能 因此我可以将数据插入 NAT 后面的数据库中 没有可用的端口转发 import paramiko from sshtunnel import SSHTunnelForwarder