如何用Paramiko实现OpenSSH ssh -J命令等效功能并解决连接异常?
将OpenSSH跳转SSH命令转换为Paramiko代码时遇到的问题
原OpenSSH命令与SSH配置
我尝试将以下OpenSSH命令转换为Paramiko库的Python代码:
sshpass -p SomePassword ssh -J specificSshHost admin@11.0.0.0 \ -oHostKeyAlgorithms=+ssh-rsa \ -oKexAlgorithms=+diffie-hellman-group1-sha1 \ -o "StrictHostKeyChecking no"
其中specificSshHost对应.ssh/config中的配置:
Host specificSshHost User admin IdentityFile ~/.ssh/mySpecificRsaKey
编写的Paramiko代码
我已编写如下代码:
import paramiko import os client = paramiko.SSHClient() client.load_host_keys("/home/name/.ssh/mySpecificRsaKey") user = 'admin' pswd = 'SomePassword' ssh_keypath = ".ssh/mySpecificSshHost" REMOTE_SERVER_IP = "11.0.0.0" client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=str(REMOTE_SERVER_IP), username=user, key_filename=ssh_keypath)
遇到的错误信息
运行代码后出现Paramiko日志错误:
INFO:paramiko.hostkeys:Not enough fields found in known_hosts in line 26 ('xPuIyxnS2aQoUvDVyCtJEJ47P6nH8su/bDGj6hrS1GBOFYLrCu4LBQ==') INFO:paramiko.hostkeys:Unable to handle key of type RSA
且connect命令一直挂起,触发KeyboardInterrupt后得到如下调用栈:
File "/tmp/ipykernel_202149/1488139442.py", line 36, in <module> client.connect(hostname=str(REMOTE_SERVER_IP), username =str(user), File "/home/david/miniconda3/lib/python3.9/site-packages/paramiko/client.py", line 358, in connect retry_on_signal(lambda: sock.connect(addr)) File "/home/david/miniconda3/lib/python3.9/site-packages/paramiko/util.py", line 279, in retry_on_signal return function() File "/home/david/miniconda3/lib/python3.9/site-packages/paramiko/client.py", line 358, in <lambda> retry_on_signal(lambda: sock.connect(addr))
疑问
已知Paramiko支持RSA及相关算法,请问为何会出现这些问题?
内容的提问来源于stack exchange,提问作者DaveR
相关产品推荐
相关产品推荐

