通用技术 怎么使用 python 通过跳板机链接 mysql?

日积跬步 · 2024年04月10日 · 最后由 今晚打老虎 回复于 2024年04月11日 · 2618 次阅读

公司数据库需要通过 JumpServer 连接,百度了一下,要用这种方法连接:

结果是:

通过 nmap 发现 22 这个端口是 filtered 的,应该没法通过 ssh 连接跳板机

这咋办,有没有其他方式连接?谢谢!

共收到 2 条回复 时间 点赞

我对比了一下我之前通过 ssh 连接跳板机的代码,发现了与你的代码的不同之处,你可以尝试把不同部分加上再运行,希望能帮到你

# 在实例化SSHTunnelForwarder加上 local_bind_address=('127.0.0.1', 22)
# 以下为伪代码
tunnel = SSHTunnelForwarder(其他参数,local_bind_address=('127.0.0.1', 22))
# pymysql连接的时候host和port要修改为tunnel的host和port
# 以下为伪代码
conn = pymysql.connect(host=tunnel.local_bind_host,port=tunnel.local_bind_port,其他参数)

试试这个

from sshtunnel import SSHTunnelForwarder
import pymysql

jump_host = 'jump_host_ip'
jump_port = 22
jump_user = 'jump_username'
jump_key = 'path_to_jump_private_key'

dest_host = 'mysql_host_ip'
dest_port = 3306
dest_user = 'mysql_username'
dest_password = 'mysql_password'

# 建立SSH隧道
with SSHTunnelForwarder(
    (jump_host, jump_port),
    ssh_username=jump_user,
    ssh_pkey=jump_key,
    remote_bind_address=(dest_host, dest_port)
) as tunnel:
    # 连接MySQL数据库
    conn = pymysql.connect(
        host='127.0.0.1',
        port=tunnel.local_bind_port,
        user=dest_user,
        passwd=dest_password,
        db='your_database'
    )

    # 执行SQL查询
    with conn.cursor() as cursor:
        cursor.execute('SELECT * FROM your_table')
        result = cursor.fetchall()
        for row in result:
            print(row)

    # 关闭连接
    conn.close()
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册