paramiko连接服务器报错“Unable to agree on a pubkey algorithm... “及解决办法

项目中使用了paramiko作为ssh客户端去连接Linux服务器,之前使用一直正常,今天突然报错了,报错信息如下:

Exception(client): Unable to agree on a pubkey algorithm for signign a 'ssh-rsa' key!
Traceback
...
paramiko.ssh_exception.SSHException:No existing session

我的示例代码如下, paramiko版本是3.1.0

import paramiko

ip = 'xxx.xxx.xxx.xxx'
port = 22
user = 'xxx'
password = 'xxx'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip, port=port, username=user, password=password)

排查思路

  • 我先检查了服务器是否可以使用ssh正常连接: 使用终端软件MobaXterm连接正常
  • 我又使用paramiko连接了其他Linux服务器,也能正常连接,考虑到可能是服务端的ssh差异导致
  • 查看ssh的版本:ssh -V,两个服务器的ssh版本如下:
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 # 可正常连接
OpenSSH_8.3p1, without OpenSSL	#连接报错

解决办法

网上查阅了大量资料,其中大部分都是在connect方法中添加参数,如下:

ssh.connect(ip, port,user,password, disabled_algorithms={'keys': ['rsa-sha2-256', 'rsa-sha2-512']})
或
ssh.connect(ip, port,user,password, disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']})

奈何都不能够解决问题,该报的错一点没少, 😔
最终通过我不断的尝试,使用下面的方式解决了问题,大家拿走不谢~

import paramiko

ip = 'xxx.xxx.xxx.xxx'
port = 22
user = 'xxx'
password = 'xxx'

transport = paramiko.Transport((ip, port))
transport.connect(username=user, password=password)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('pwd')
print(stdout.read().decode('utf8'))

完结撒花❀

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值