如何在Python SSHTunnel中禁用公钥算法

3
我遇到了连接sshtunnel的问题,因为服务器不支持rsa-sha2-512公钥算法。由于我无法更改服务器上的任何内容,所以只有在使用disable_algorithms配置参数时,我才能使用paramiko进行连接。但是在使用sshtunnel时,我无法找出如何调整paramiko disable_algorithms的配置。
import sshtunnel

with sshtunnel.open_tunnel(
    (REMOTE_SSH_IP, 22),
    ssh_username='username',
    ssh_pkey='~/.ssh/id_rsa',
    remote_bind_address=('127.0.0.1', 8080)
) as tunnel:
    print('DONE')

如果我使用Paramiko打开一个SSH会话到同一台机器,使用相同的公钥时,只有在设置SSHClient配置中的disabled_algorithms时才能成功连接。
disabled_algorithms=dict(pubkeys=["rsa-sha2-512", "rsa-sha2-256"])

如果我能在sshtunnel中以某种方式设置相同的disabled_algorithms,那么我认为这将解决我的问题。 我尝试过使用~/.ssh/config,但是sshtunnel似乎并不遵守它,即使我在open_tunnel配置中设置了路径。 我仍然会收到相同的错误。 ssh_config_file="~/.ssh/config"
预先致谢。
Python 3.10.2标准输出:
ERROR:sshtunnel.SSHTunnelForwarder:Could not open connection to gateway
Traceback (most recent call last):
  File "/Users/blah/Files/Devel/TXPro/inventory/inventory/cli/test.py", line 26, in <module>
    with sshtunnel.open_tunnel(
  File "/Users/blah/.pyenv/versions/3.10.2/lib/python3.10/site-packages/sshtunnel.py", line 1608, in __enter__
    self.start()
  File "/Users/blah/.pyenv/versions/3.10.2/lib/python3.10/site-packages/sshtunnel.py", line 1331, in start
    self._raise(BaseSSHTunnelForwarderError,
  File "/Users/blah/.pyenv/versions/3.10.2/lib/python3.10/site-packages/sshtunnel.py", line 1174, in _raise
    raise exception(reason)
sshtunnel.BaseSSHTunnelForwarderError: Could not establish session to SSH gateway

paramiko 2.9.2 调试:

DEBUG:paramiko.transport:Finalizing pubkey algorithm for key of type 'ssh-rsa'
DEBUG:paramiko.transport:Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
DEBUG:paramiko.transport:Server did not send a server-sig-algs list; defaulting to our first preferred algo ('rsa-sha2-512')
DEBUG:paramiko.transport:NOTE: you may use the 'disabled_algorithms' SSHClient/Transport init kwarg to disable that or other algorithms if your server does not support them!
INFO:paramiko.transport:Authentication (publickey) failed.

sshd日志 - OpenSSH_6.6.1p1,OpenSSL 1.0.1e-fips 11 Feb 2013:

sshd[32307]: reverse mapping checking getaddrinfo for <HIDDEN> [HIDDEN] failed - POSSIBLE BREAK-IN ATTEMPT!
sshd[32307]: userauth_pubkey: unsupported public key algorithm: rsa-sha2-512 [preauth]
sshd[32307]: Connection closed by <HIDDEN> [preauth]

~/.ssh/config

Host *
        HostbasedAcceptedAlgorithms -rsa-sha2-256,-rsa-sha2-512
        HostKeyAlgorithms -rsa-sha2-256,-rsa-sha2-512
        PubkeyAcceptedAlgorithms -rsa-sha2-256,-rsa-sha2-512

你尝试在sshconfig文件中配置算法了吗?因为sshtunnel可能会重用配置文件。 - Lei Yang
@LeiYang 谢谢你的建议。我尝试将 HostKeyAlgorithms -rsa-sha2-256,-rsa-sha2-512 添加到我的 .ssh/config 文件中,但似乎 sshtunnel 没有读取它。我可以在命令行上使用相同的私钥从服务器上进行 ssh 连接,但在使用 sshtunnel 的 Python 脚本中却无法连接。 - natetas
1个回答

6

在最新版本的paramiko库(例如paramiko~=2.11.0)中存在一个问题:RSA密钥被视为DSA密钥。通过使用较低版本的库(例如paramiko~=2.8.1),可以解决该问题,无需使用ssh配置或disabled_algorithms标志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接