- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上下文:
我正在尝试通过 SSH 和 Python 连接到远程 MySQL 安装。我正在使用 paramiko 和 SSHTunnel,目前在 py 2.7 上。
我已经使用 bash shell、paramiko 的 forward.py,甚至 SSHTunnel 的 CLI 命令成功连接和查询远程数据库中的记录。
问题:
在尝试将其迁移到将创建隧道并查询结果的单个脚本时,我遇到了问题。问题似乎出在我对 SSHTunnel 语法的格式化/结构上。
这是我用来在 shell 上打开隧道的方法:
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"
注意:我目前使用的是没有密码的 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,这让我更仔细地考虑时间安排。
关于带有 Paramiko 的 Python SSHTunnel - CLI 有效,但在脚本中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39945269/
我不是 C 程序员。有什么想法吗? 这是我尝试过的安装命令: pip install paramiko sudo pip install paramiko 输出: src/_fastmath.c:15
Importing paramiko throws following exception on Python3. Traceback (most recent call last): File
我正在编写一个 Python 脚本,需要下载远程 xml 文件来解析它。 我正在使用 paramiko。 这是脚本: def copyFile(ip, user, pwd, remotePath, l
好的,所以我正在尝试在我的 python 脚本中实现 paramiko。 目的是连接同一局域网内的另一台PC,通过python执行命令。 我的 python 版本: Python 2.7.6 (def
我正在调试一些代码,这将导致我不断地登录/退出一些外部 sftp 服务器。有谁知道如果代码中出现非 paramiko 异常,paramiko 是否会自动关闭外部服务器上的 ssh/sftp sessi
我不断收到以下错误: Traceback (most recent call last): File "/home/d/workspace/paramiko/connect_test/main.p
我正在尝试通过 SSH 从 Python 远程执行命令,在这种特殊情况下需要将 stdin 重定向到/dev/null。 也就是说,与使用带有 -n 标志的 OpenSSH 客户端相同: ssh -n
当我尝试打开 mysql 工作台时,它显示“导入错误:没有名为 paramiko 的模块;操作失败:无法启动 SSH 隧道管理器”,尽管我已经安装了 paramiko。我正在使用 python 2.7
我正在尝试使用 paramiko 通过 netcat 反弹 SSH session : MyLocalMachine ----||----> MiddleMachine --(netcat)-->
我目前正在开发一个程序,该程序尝试联系运行 Cisco IOS 的众多路由器以获取其当前配置。我正在尝试使用 Paramiko 模块的 SSHClient 来实现这一点目的: def get_conf
我有基于 paramiko 模块的 python 2.7 代码,我想将其移植到 python 3.3,但我似乎找不到可以工作的 paramiko 版本或合适的替代版本。 我需要该模块在 Windows
我正在尝试运行使用 SSHLibrary 的机器人框架测试用例。我已经安装了所有必需的库(在本例中为 paramiko)。但我仍然收到此错误。 我得到的错误是: Error in file '/opt
有什么方法可以在后台运行 mysql 命令或保持连接事件一段时间,以便可以对其执行查询。可以用nohup来实现吗?如果是,怎么办? 最佳答案 是的,你可以用ajax来做到这一点 使用Nohup你可以做
我正在尝试在 python 中使用 paramiko 执行一个简单的代理命令。 基本上我正在尝试复制此 ssh 命令的行为: ssh -i ~/.ssh/destination_key user@de
This question already has answers here: Pass input/variables to command/script over SSH using Python
Paramiko 支持基于证书的身份验证吗? connect 方法中的 key_filename 提到它同时支持私钥和证书,这里的证书是指基于证书的身份验证吗? key_filename (str)
我刚刚尝试与 paramiko 进行 ssh 连接。一切看起来都很好,但在最后一步,当调用 close() 方法断开客户端连接时。 这是我的脚本: #!/usr/bin/python import p
上下文 如果有一个连接到服务器的脚本,然后 curl 本地主机以获取我需要的信息 问题 我的问题是,我需要从大约 200 台服务器获取信息,我使用的方法大约需要 15 分钟才能完成,这还不错,但我想做
我在尝试关闭 Paramiko SFTP 连接时遇到问题。即使我调用关闭连接仍然挂起,我通过运行 netstat (Windows) 检查: netstat -an | find ":22" 和pyt
localpath = 'U:\\' utime = sftp.stat("/TestBTEC/").st_mtime last_modified = datetime.fromtimestamp(u
我是一名优秀的程序员,十分优秀!