首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带有密码的python sshtunnel而不是密钥文件

如何使用带有密码的python sshtunnel而不是密钥文件
EN

Stack Overflow用户
提问于 2021-11-23 08:06:29
回答 1查看 313关注 0票数 0

我想从我的本地机器打开一个ssh隧道,将我的python脚本连接到一个远程数据库。我用来打开ssh隧道的代码是:

代码语言:javascript
复制
        with sshtunnel.SSHTunnelForwarder(
                (ssh_host, ssh_port),
                ssh_username=ssh_user,
                ssh_password=ssh_password,
                remote_bind_address=(db_ip, db_port)
        ) as tunnel:
            # dummy code to check tunnel
            tunnel.start()
            logger.debug(f"IsUp: {tunnel.tunnel_is_up} | {tunnel.local_bind_address}")

我所期望的是使用ss_user和ssh_password作为凭证打开ssh隧道(来自不同的来源,做完全相同的事情)。(是的,当我在shell中手动ssh到服务器时,凭据正在工作)

我得到的是来自我的本地系统(Ubuntu20.04)的提示,要求解锁我的个人ssh密钥,尽管我显式地将SSHTunnelForwarder配置为使用密码。

然后我得到的错误消息是无法建立ssh隧道,因为使用ssh密钥的身份验证失败:

代码语言:javascript
复制
2021-11-23 08:40:10,847| ERROR   | Password is required for key <redacted path>/.ssh/id_rsa
2021-11-23 08:46:25,737| ERROR   | Exception: key cannot be used for signing
2021-11-23 08:46:25,786| ERROR   | Traceback (most recent call last):
2021-11-23 08:46:25,786| ERROR   |   File "<redacted path>/lib/python3.9/site-packages/paramiko/transport.py", line 2109, in run
2021-11-23 08:46:25,786| ERROR   |     handler(self.auth_handler, m)
2021-11-23 08:46:25,786| ERROR   |   File "<redacted path>/lib/python3.9/site-packages/paramiko/auth_handler.py", line 298, in _parse_service_accept
2021-11-23 08:46:25,786| ERROR   |     sig = self.private_key.sign_ssh_data(blob)
2021-11-23 08:46:25,786| ERROR   |   File "<redacted path>/lib/python3.9/site-packages/paramiko/agent.py", line 418, in sign_ssh_data
2021-11-23 08:46:25,787| ERROR   |     raise SSHException("key cannot be used for signing")
2021-11-23 08:46:25,787| ERROR   | paramiko.ssh_exception.SSHException: key cannot be used for signing
2021-11-23 08:46:25,787| ERROR   | 
2021-11-23 08:46:25,787| ERROR   | Could not connect to gateway <ssh_host>:<ssh_port> : key cannot be used for signing
Traceback (most recent call last):
  File "<redacted path>/lib/python3.9/site-packages/sshtunnel.py", line 1608, in __enter__
    self.start()
  File "<redacted path>/lib/python3.9/site-packages/sshtunnel.py", line 1331, in start
    self._raise(BaseSSHTunnelForwarderError,
  File "<redacted path>/lib/python3.9/site-packages/sshtunnel.py", line 1174, in _raise
    raise exception(reason)
sshtunnel.BaseSSHTunnelForwarderError: Could not establish session to SSH gateway
python-BaseException

Process finished with exit code 1

不知何故,ssh隧道在默认情况下尝试加载标准.ssh路径中的任何ssh密钥,而不是使用提供的凭据。这是lib版本中的错误吗?即时消息使用

代码语言:javascript
复制
paramiko==2.8.0
sshtunnel==0.4.0

或者我必须更改我的设置?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-23 09:59:41

正如document中所述,将allow_agent设置为False将有助于Enable/disable load of keys from an SSH agent。例如:sshtunnel.SSHTunnelForwarder(..., allow_agent=False)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70077322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档