首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Paramiko的基本SSH连接失败

使用Paramiko的基本SSH连接失败
EN

Stack Overflow用户
提问于 2020-08-12 22:06:27
回答 3查看 2.2K关注 0票数 1

我正在学习paramiko的基础知识,为此,我建立了一个基本实验室,在那里我将一个Ubuntu连接到一个在EVE中模拟的路由器。

第一步是通过ssh-Keygen在客户端生成密钥对。

接下来,我使用以下命令将公钥加载到远程服务器( Cisco路由器):

代码语言:javascript
运行
复制
ip ssh pubkey-chain
  username administrator
   key-hash ssh-rsa 97D0E9B5630D05D78EA9531053124BFF

之后,我就从Ubuntu登录到Cisco路由器:

代码语言:javascript
运行
复制
$ ssh administrator@192.168.1.1
7206_1.rt#

然后,我从同一个客户端启动了Python会话,并尝试使用Paramiko建立SSH会话:

代码语言:javascript
运行
复制
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.1', username='administrator', password='password', key_filename= '/home/administrator/.ssh/id_rsa.pub') 

但这一次我得到了以下例外:

代码语言:javascript
运行
复制
Exception: Illegal info request from server
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/paramiko/transport.py", line 2109, in run
    handler(self.auth_handler, m)
  File "/usr/local/lib/python3.8/dist-packages/paramiko/auth_handler.py", line 661, in _parse_userauth_info_request
    raise SSHException("Illegal info request from server")
paramiko.ssh_exception.SSHException: Illegal info request from server

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/paramiko/client.py", line 435, in connect
    self._auth(
  File "/usr/local/lib/python3.8/dist-packages/paramiko/client.py", line 764, in _auth
    raise saved_exception
  File "/usr/local/lib/python3.8/dist-packages/paramiko/client.py", line 751, in _auth
    self._transport.auth_password(username, password)
  File "/usr/local/lib/python3.8/dist-packages/paramiko/transport.py", line 1498, in auth_password
    raise SSHException("No existing session")
paramiko.ssh_exception.SSHException: No existing session

远程路由器SSH调试显示身份验证失败:

代码语言:javascript
运行
复制
*Aug 16 01:18:07.295: SSH2 0: MAC compared for #5 :ok
*Aug 16 01:18:07.299: SSH2 0: input: padlength 16 bytes
*Aug 16 01:18:07.299: SSH2 0: Using method = publickey
*Aug 16 01:18:07.307: SSH2 0: send:packet of  length 432 (length also includes padlen of 4)
*Aug 16 01:18:07.307: SSH2 0: computed MAC for sequence no.#5 type 60
*Aug 16 01:18:07.311: SSH2 0: Authenticating 'administrator' with method: publickey
*Aug 16 01:18:07.327: SSH2 0: SSH ERROR closing the connection
*Aug 16 01:18:07.331: SSH2 0: send:packet of  length 80 (length also includes padlen of 15)
*Aug 16 01:18:07.331: SSH2 0: computed MAC for sequence no.#6 type 1
*Aug 16 01:18:07.335: SSH2 0: Pubkey Authentication failed for user administrator
*Aug 16 01:18:07.335: SSH0: password authentication failed for administrator

此时,我无法判断问题是在服务器中还是在路由器中,因为在没有Paramiko的情况下,在从服务器直接连接到路由器时,所有问题都可以正常工作。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-08-18 21:32:46

好的,在默认情况下,Paramiko在~/..ssh/中搜索可发现的私钥文件,如果试图连接到另一台服务器,这很好,但是由于它试图到达路由器,因此需要通过将look_for_keys设置为False来禁用此功能。这解决了问题(只要这不是生产环境),这就是我的情况。

票数 1
EN

Stack Overflow用户

发布于 2022-08-30 14:20:06

如果它对其他人有帮助,我会收到同样的“来自服务器的非法信息请求”错误,因为所使用的密码上有一个标志,需要更新。我只在通过WinSCP手动登录时才看到这种情况。

票数 1
EN

Stack Overflow用户

发布于 2020-08-16 01:01:43

身份验证是通过/home/管理员/..ssh/id_rsa.PUB上的公钥完成的。

不完全是:输入时使用的是本地用户的私钥:

代码语言:javascript
运行
复制
ssh administrator@192.168.1.1

'administrator‘是用于在远程服务器上打开会话的远程帐户的名称

远程端的身份验证将使用~administrator/.ssh/authorized_keys (同样,在远程机器上)进行,以检查本地~/.ssh/id_rsa.pub公钥是否已在远程~administrator/.ssh/authorized_keys中正确注册。

您的本地帐户也可能是'administrator',但是在执行Python时,相同的本地帐户可能不是相同的。

当你看到

代码语言:javascript
运行
复制
Authenticating 'administrator' with method: publickey

SSH指的是远程服务器上的远程“administrator”帐户,而不管您所在的本地用户帐户是什么。

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

https://stackoverflow.com/questions/63385323

复制
相关文章

相似问题

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