通过SSH隧道访问远程数据库

问题描述 投票:0回答:1

我想通过SSH隧道访问远程数据库。

server = SSHTunnelForwarder(
    ('172.17.9.125', 22),
    ssh_password="123456",
    ssh_username="root",
    remote_bind_address=('127.0.0.1', 3306))

server.start()

database = pymysql.connect(host='127.0.0.1',
                           port=3306,
                           user='root',
                           passwd='root')

try:
    dbsql = "CREATE DATABASE TestDB"  # Create database
except Exception as e:
    print("Error: ", e)
database.cursor().execute(dbsql)

global db, cursor
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='TestDB')

cursor = db.cursor()
print("Connected to MySQL database")

f = open("testdb.sql")  # Execute .sql file, creating data tables
full_sql = f.read()
sql_commands = full_sql.split(';')[:-1]
try:
    for sql_command in sql_commands:
        if sql_command is not None:
            cursor.execute(sql_command)
        else:
            print("Null")
    print("Created database")
except Exception as e:
    print("Error: ", e)

我想在这个远程服务器172.17.9.125上创建一个名为“TESTDB”的新数据库。

但是我在localhost中创建了这个数据库。我在这做错了什么?

python mysql database pymysql ssh-tunnel
1个回答
0
投票

由于您已经运行了数据库,因此使用了3306端口,因此将无法绑定。

解决方案:将其绑定到其他端口并尝试连接到该端口。

您可以在local_bind_address=('0.0.0.0', 1234)的参数中使用SSHTunnelForwarder(这将是它将绑定到的目标本地地址/端口)绑定到另一个地址。

所以你的连接TunnelForwarder应该是这样的

server = SSHTunnelForwarder(
    ('172.17.9.125', 22),
    ssh_password="123456",
    ssh_username="root",
    local_bind_address=('0.0.0.0', 1234),
    remote_bind_address=('127.0.0.1', 3306))

现在将与port 1234建立联系

database = pymysql.connect(host='127.0.0.1',
                           port=1234,
                           user='root',
                           passwd='root')


db = pymysql.connect(host='127.0.0.1', port=1234, user='root', passwd='root', db='TestDB')
© www.soinside.com 2019 - 2024. All rights reserved.