繁体   English   中英

连接到MySQL服务器之前,在后台运行ssh端口转发

[英]Run ssh port forwarding in background before connecting to mySql server

我正在编写一个python脚本,它将打开一个ssh连接以进行端口转发,如下所示:

import pexpect
import sqlalchemy as sql

child = pexpect.spawnu('ssh -L 3306:remote.db.host:3306 username@hostname')
child.expect (u'password:')
child.sendline ('xxxxxxxx')

while child.isalive():
    try:
        engine = sql.create_engine('mysql+pymysql://ro:xxxx@127.0.0.1:3306/testdb')
        connection = engine.connect()
        #run queries 
        connection.close()
        break
    finally:
        child.close()

该脚本显示了此错误,我不知道该怎么办。

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 61] Connection refused)")

如果我在child.sendline(..)之后使用'child.interact()',则最终将登录到转发服务器。 但是我真正想要的是继续并运行一个sql查询,以从本地主机端口3306上的远程数据库中获取数据。

那么,如何才能将ssh连接在后台运行? 在连接到mysql服务器之前,我需要确保已建立连接。

你快到了。 尝试对您的ssh命令使用-N参数,以便它在创建隧道后立即返回: ssh -LN 3306:remote.db.host:3306 username@hostname

我还会使用ssh密钥(可能没有密码或使用某种密钥环),因此您不必使用pexpect。

尝试创建一个bash脚本来创建隧道并像这样运行python脚本:

#!/bin/bash

ssh -LN 3306:remote.db.host:3306 username@hostname
python your_script_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM