小编map*_*boy的帖子

带有Paramiko的Python SSHTunnel-CLI可以运行,但不能在脚本中运行

上下文:
我正在尝试通过SSH和Python连接到远程MySQL安装。我正在使用paramiko和SSHTunnel,目前在py 2.7上。

我已经成功地使用bash shell,paramiko的forward.py甚至SSHTunnel的CLI命令连接和查询了远程数据库中的记录。

问题:
尝试将其迁移到将创建隧道并查询结果的单个脚本时遇到问题。问题似乎与我对SSHTunnel语法的格式设置/结构有关。

这是我用来在外壳上打开隧道的方法:

ssh -p SSH_PORT SSH_USER@SERVER_IP -L 33060:127.0.0.1:3306
Run Code Online (Sandbox Code Playgroud)

这就是我用paramiko的forward.py打开的内容:

python t_forward.py SERVER_IP:SSH_PORT -r 3306 -u SSH_USER -p 33060 -K "/PATH/TO/PRIVATE/KEY"
Run Code Online (Sandbox Code Playgroud)

注意:我目前正在使用没有密码的密钥(用于测试/开发目的)

这是我以前用SSHTunnel的命令行打开的内容:

python -m sshtunnel -U SSH_USER -L :33060 -R 127.0.0.1:3306 -p SSH_PORT SERVER_IP -K "/PATH/TO/PRIVATE/KEY"
Run Code Online (Sandbox Code Playgroud)

按照以上所述,所有这些都可以正常工作,使用MySQLdb连接到数据库并检索记录的py脚本也可以正常工作。

发生故障的地方是我尝试将SSH连接字符串添加到脚本中的时候。这是当前的样子:

server = SSHTunnelForwarder(
    ('SERVER_IP', SSH_PORT),
    ssh_username='SSH_USER',
    ssh_pkey='/PATH/TO/PRIVATE/KEY',
    remote_bind_address=('127.0.0.1', 3306),
    local_bind_address=('0.0.0.0', 33060)
)
Run Code Online (Sandbox Code Playgroud)

MYSQL连接线如下所示:

con = MySQLdb.connect(user='MYSQLDBUSER',passwd='MYSQLDBUSERPASS',db='DATABASE',host='127.0.0.1', port=33060)
Run Code Online (Sandbox Code Playgroud)

鉴于我能够通过BASH以及forward.py和SSHTunnel的CLI进行连接,这在服务器上似乎不是问题,但我的SSHTunnelForwarder格式不正确。

错误信息:

Could not establish connection from ('127.0.0.1', 33060) to remote side of the tunnel
Run Code Online (Sandbox Code Playgroud)

查看服务器上的var / log / …

python mysql ssh

1
推荐指数
1
解决办法
1444
查看次数

标签 统计

mysql ×1

python ×1

ssh ×1