带有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

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

python t_forward.py SERVER_IP:SSH_PORT -r 3306 -u SSH_USER -p 33060 -K "/PATH/TO/PRIVATE/KEY"

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

这是我以前用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"

按照以上所述,所有这些都可以正常工作,而使用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)
)

MYSQL连接线如下所示:

con = MySQLdb.connect(user='MYSQLDBUSER',passwd='MYSQLDBUSERPASS',db='DATABASE',host='127.0.0.1', port=33060)

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

错误信息:

Could not establish connection from ('127.0.0.1', 33060) to remote side of the tunnel

查看服务器上的var / log / auth.log,我发现它可以连接,当MySQLDB.connect启动时,它似乎崩溃了。

出现此错误时出现auth.log消息:

Oct  9 17:36:31 HOSTSERVER sshd[21141]: Accepted publickey for SSH_USER from SOURCE_IP port 32918 ssh2: RSA <LONG KEY>
Oct  9 17:36:31 HOSTSERVER sshd[21141]: pam_unix(sshd:session): session opened for user SSH_USER by (uid=0)
Oct  9 17:36:31 HOSTSERVER systemd-logind[1217]: New session 144 of user SSH_USER.
Oct  9 17:36:32 HOSTSERVER sshd[21141]: pam_unix(sshd:session): session closed for user SSH_USER

使用SSHTunnel CLI时的auth.log消息(结果有效):

Oct  9 17:39:33 HOSTSERVER sshd[21625]: Accepted publickey for SSH_USER from SOURCE_IP port 44132 ssh2: RSA <LONG KEY>
Oct  9 17:39:33 HOSTSERVER sshd[21625]: pam_unix(sshd:session): session opened for user SSH_USER by (uid=0)
Oct  9 17:39:33 HOSTSERVER systemd-logind[1217]: Removed session 144.
Oct  9 17:39:33 HOSTSERVER systemd-logind[1217]: New session 145 of user SSH_USER.

似乎我在这里缺少了一些非常基本的东西。任何帮助将不胜感激。

地图男孩

找到了答案!

事实证明,在建立连接之前,脚本会继续执行。因此,MySQLDB会在完全建立隧道之前尝试连接到端口映射。

一个简单的:

import time
...
sleep(1)
...

绝招。

就我而言,我在“ server.start()”之后和需要访问远程数据库的代码之前添加了sleep(1)。

感谢@kenster,他让我更加仔细地查看auth.log,这使我可以更加仔细地考虑计时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 Python 捕获 sshtunnel 异常

来自分类Dev

Python导入模块可在提示符下运行,但不能在脚本中运行

来自分类Dev

Python导入模块可在提示符下运行,但不能在脚本中运行

来自分类Dev

Python脚本手动运行,但不能在cronjob中运行

来自分类Dev

Python - 程序可以在 Linux 中运行,但不能在 Windows 中运行

来自分类Dev

如何使用python的sshtunnel连接到仅运行telnet的路由器?

来自分类Dev

带有curl的脚本可以手动运行,但不能在cron作业中使用

来自分类Dev

测试的顺序可以在python 2上完美运行,但不能在python 3上完美运行

来自分类Dev

Python代码可在Windows中运行,但不能在Linux中运行

来自分类Dev

Flask Sqlalchemy模型可在python shell中运行,但不能在Web界面中运行

来自分类Dev

Python程序可在IDLE中运行,但不能在命令行中运行(PowerShell)

来自分类Dev

Python正则表达式可在线运行,但不能在代码中运行

来自分类Dev

Python脚本可在Linux上运行,但不能在Windows上运行,我真的很绝望

来自分类Dev

Python串行可以在Shell中工作,但不能在脚本中工作吗?

来自分类Dev

Shopify Python API命令可在html视图中运行,但不能在views.py文件中运行

来自分类Dev

有没有办法将密钥而不是文件传递给python sshtunnel?

来自分类Dev

为什么带有flex的HTML圣杯可以在Chrome上运行,而不能在Firefox上运行?

来自分类Dev

为什么我可以在seed.rb中具有未定义多态关联的模型上运行create,但不能在我的控制器中运行呢?

来自分类Dev

程序可以在终端上正常运行,但不能在Shell脚本中运行

来自分类Dev

具有kivy的json,可在Ubuntu上运行,但不能在android上运行(Buildozer)

来自分类Dev

我有一个简单的代码可以在localhost上正常运行,但不能在真实服务器上运行

来自分类Dev

为什么这个 C 代码在没有 cygwin 的情况下可以在 linux 上运行,但不能在 Windows 上运行

来自分类Dev

Python日志记录可在Windows上运行,但不能在Mac OS上运行

来自分类Dev

Python模块可在2.7上运行,但不能在3.5上运行

来自分类Dev

为什么sshtunnel阻止SIGINT关闭我的python应用程序?

来自分类Dev

我有一个使用OpenCV的python脚本,代码可以在python 2.7中工作,但不能在python 3.7中工作,我不确定为什么

来自分类Dev

Zapier Cli-应用程序可以在Cli中正常运行,但不能在Zapier UI中运行

来自分类Dev

脚本无法在带有IE的IFrame中运行-可以

来自分类Dev

为什么我的python的socket.shutdown可以在Windows上运行而不能在Ubuntu上运行?

Related 相关文章

  1. 1

    使用 Python 捕获 sshtunnel 异常

  2. 2

    Python导入模块可在提示符下运行,但不能在脚本中运行

  3. 3

    Python导入模块可在提示符下运行,但不能在脚本中运行

  4. 4

    Python脚本手动运行,但不能在cronjob中运行

  5. 5

    Python - 程序可以在 Linux 中运行,但不能在 Windows 中运行

  6. 6

    如何使用python的sshtunnel连接到仅运行telnet的路由器?

  7. 7

    带有curl的脚本可以手动运行,但不能在cron作业中使用

  8. 8

    测试的顺序可以在python 2上完美运行,但不能在python 3上完美运行

  9. 9

    Python代码可在Windows中运行,但不能在Linux中运行

  10. 10

    Flask Sqlalchemy模型可在python shell中运行,但不能在Web界面中运行

  11. 11

    Python程序可在IDLE中运行,但不能在命令行中运行(PowerShell)

  12. 12

    Python正则表达式可在线运行,但不能在代码中运行

  13. 13

    Python脚本可在Linux上运行,但不能在Windows上运行,我真的很绝望

  14. 14

    Python串行可以在Shell中工作,但不能在脚本中工作吗?

  15. 15

    Shopify Python API命令可在html视图中运行,但不能在views.py文件中运行

  16. 16

    有没有办法将密钥而不是文件传递给python sshtunnel?

  17. 17

    为什么带有flex的HTML圣杯可以在Chrome上运行,而不能在Firefox上运行?

  18. 18

    为什么我可以在seed.rb中具有未定义多态关联的模型上运行create,但不能在我的控制器中运行呢?

  19. 19

    程序可以在终端上正常运行,但不能在Shell脚本中运行

  20. 20

    具有kivy的json,可在Ubuntu上运行,但不能在android上运行(Buildozer)

  21. 21

    我有一个简单的代码可以在localhost上正常运行,但不能在真实服务器上运行

  22. 22

    为什么这个 C 代码在没有 cygwin 的情况下可以在 linux 上运行,但不能在 Windows 上运行

  23. 23

    Python日志记录可在Windows上运行,但不能在Mac OS上运行

  24. 24

    Python模块可在2.7上运行,但不能在3.5上运行

  25. 25

    为什么sshtunnel阻止SIGINT关闭我的python应用程序?

  26. 26

    我有一个使用OpenCV的python脚本,代码可以在python 2.7中工作,但不能在python 3.7中工作,我不确定为什么

  27. 27

    Zapier Cli-应用程序可以在Cli中正常运行,但不能在Zapier UI中运行

  28. 28

    脚本无法在带有IE的IFrame中运行-可以

  29. 29

    为什么我的python的socket.shutdown可以在Windows上运行而不能在Ubuntu上运行?

热门标签

归档