当前位置: 首页 > 面试题库 >

Paramiko协议错误:预期的数据包SSH_MSG_USERAUTH_REQUEST,获得了SSH_MSG_SERVICE_REQUEST

杜联
2023-03-14
问题内容

当我使用ssh命令手动连接到主机时,一切正常:

$ ssh -v admin@mycli.abc.com -p 10000
OpenSSH_6.1p1, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /home/todd/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to mycli.abc.com [mycli.abc.com] port 10000.
debug1: Connection established.
debug1: identity file /home/todd/.ssh/id_rsa type 1
debug1: identity file /home/todd/.ssh/id_rsa-cert type -1
debug1: identity file /home/todd/.ssh/id_dsa type -1
debug1: identity file /home/todd/.ssh/id_dsa-cert type -1
debug1: identity file /home/todd/.ssh/id_ecdsa type -1
debug1: identity file /home/todd/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version SSHD-CORE-0.6.0
debug1: no match: SSHD-CORE-0.6.0
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Server host key: DSA 6f:2c:48:80:86:ff:69:99:28:c2:21:5b:02:d4:7f:63
debug1: checking without port identifier
The authenticity of host '[mycli.abc.com]:10000 ([mycli.abc.com]:10000)' can't be established.
DSA key fingerprint is 6f:2c:48:80:86:ff:69:99:28:c2:21:5b:02:d4:7f:63.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[mycli.abc.com]:10000' (DSA) to the list of known hosts.
debug1: ssh_dss_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: password,publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/todd/.ssh/id_rsa
debug1: Authentications that can continue: password,publickey
debug1: Trying private key: /home/todd/.ssh/id_dsa
debug1: Trying private key: /home/todd/.ssh/id_ecdsa
debug1: Next authentication method: password
admin@mycli.abc.com's password:
debug1: Authentication succeeded (password).
Authenticated to mycli.abc.com ([mycli.abc.com]:10000).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: No xauth program.
Warning: No xauth data; using fake authentication data for X11 forwarding.
debug1: Requesting X11 forwarding with authentication spoofing.
X11 forwarding request failed on channel 0
Cli>

但是使用paramiko总是失败:

DEBUG:paramiko.transport:starting thread (client mode): 0x22783e10L
INFO:paramiko.transport:Connected (version 2.0, client SSHD-CORE-0.6.0)
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group1-sha1'] server key:['ssh-dss'] client encrypt:['aes128-cbc', '3des-cbc', 'blowfish-cbc'] server encrypt:['aes128-cbc', '3des-cbc', 'blowfish-cbc'] client mac:['hmac-md5', 'hmac-sha1', 'hmac-md5-96', 'hmac-sha1-96'] server mac:['hmac-md5', 'hmac-sha1', 'hmac-md5-96', 'hmac-sha1-96'] client compress:['none'] server compress:['none'] client lang:[''] server lang:[''] kex follows?False
DEBUG:paramiko.transport:Ciphers agreed: local=aes128-cbc, remote=aes128-cbc
DEBUG:paramiko.transport:using kex diffie-hellman-group1-sha1; server key type ssh-dss; cipher: local aes128-cbc, remote aes128-cbc; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none
DEBUG:paramiko.transport:Switch to new keys ...
DEBUG:paramiko.transport:Adding ssh-dss host key for [mycli.abc.com]:10000: 6f2c488086ff699928c2215b02d47f63
DEBUG:paramiko.transport:Trying discovered key d7ab335994d0e5c90f8886b515faff55 in /home/todd/.ssh/id_rsa
DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (publickey) failed.
INFO:paramiko.transport:Disconnect (code 2): Protocol error: expected packet SSH_MSG_USERAUTH_REQUEST, got SSH_MSG_SERVICE_REQUEST
Traceback (most recent call last):
  File "./mycli_test.py", line 13, in <module>
    oc = MyCli(hostname=hostname, username=username, password=password)
  File "/home/todd/devel/mylib/mycli.py", line 16, in __init__
    key_filename, timeout, allow_agent, look_for_keys, compress)
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 338, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 519, in _auth
    raise saved_exception
paramiko.AuthenticationException: Authentication failed.

paramiko脚本:

#!/usr/bin/env python2

import paramiko

paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
ssh.connect(hostname='mycli.abc.com', port=10000, username='admin', password='abc123')
i, o, e = ssh.exec_command('uname -a')
print o.readlines()
ssh.close()

paramiko版本:1.9.0

为什么会引发“协议错误:预期的数据包SSH_MSG_USERAUTH_REQUEST,得到SSH_MSG_SERVICE_REQUEST”错误?如何避免呢?


问题答案:

TL; DR:
将此添加:allow_agent=False和/或添加look_for_keys=False到您的connect()呼叫中。

通过对此进行一些研究,我得出的结论是,Paramiko SSH客户端的公共密钥身份验证并不总是适用于所有SSH服务器。我试图连接到Cisco
ASA设备。错误日志的相关部分是:

DEBUG:paramiko.transport:Switch to new keys ...
DEBUG:paramiko.transport:Trying SSH agent key 5d081d52f889f2c224606d6b2065606e
DEBUG:paramiko.transport:userauth is OK
DEBUG:paramiko.transport:Authentication type (publickey) not permitted.
DEBUG:paramiko.transport:Allowed methods: ['password']
INFO:paramiko.transport:Disconnect (code 2): Protocol error: expected packet type 50, got 5

注意“尝试SSH代理密钥…”部分吗?我不想要那个,我想强制密码验证。在OpenSSH交互式客户端从公钥正常退回到密码的地方,paramiko则没有,强制它使用用户/通过身份验证为我解决了这个问题,它可能对您有用。

我不知道这是paramiko错误还是SSH服务器上的错误。与OpenSSH服务器通讯时,Paramiko确实会从公钥还原为密码或与键盘交互。



 类似资料:
  • 问题内容: 我正在使用Fabric作为构建脚本。我只是克隆了一个虚拟机并创建了一个新服务器。Fabric脚本(在下面使用paramiko)可以在一台服务器上正常运行,但不能在另一台服务器上正常运行。由于它是一个克隆,所以我不知道会有什么不同,但是每次我运行Fabric脚本时,都会收到错误消息。该脚本与两个服务器上的同一用户连接。该脚本在所有其他服务器上都可以正常工作,除了我刚刚克隆的这一新服务器。

  • 问题内容: 我当我执行以下节点的代码在控制台错误 错误: 我正在使用Angular Js,它的文件夹结构像下面这样 我在这里想念什么? 问题答案: 这段代码: 告诉Express,无论浏览器要求什么,您的服务器都应返回。因此,当浏览器请求诸如或的JavaScript文件时,您的服务器返回的内容(以开头),这会导致JavaScript错误。 回调中的代码应查看请求以确定要发回的文件,和/或您应使用带

  • 我已经创建了一个简单的协议委托来将数据从一个视图控制器传递到第二个视图控制器--但是数据似乎没有传递出去? 详细信息:第一个视图控制器有一个textField,我在其中键入数据(字符串),以传递给第二个VC。我也有一个按钮的动作触发过渡到第二视图控制器。第二个视图控制器出现,但来自第一个视图控制器的数据没有显示出来-预期的行为是第二个VC中的标签用来自第一个VC的数据更新。我还创建了一个从FVC到

  • 问题内容: 最近,我编写了一个代码,该代码基于paramiko使用不同的用户名(由于使用了私钥)连接到工作站。 我从来没有任何问题,但今天,我有: 这很奇怪,因为它随机发生在任何连接上。有什么办法可以解决? 问题答案: 这取决于您所说的“修复”。如评论中指出的,根本原因是资源拥塞/不足。这样,它类似于某些HTTP代码。这是正常的原因,可能是ssh服务器返回错误的标头数据。 429请求太多,告诉客户

  • 问题内容: 遇到错误 当我运行以下查询 如果我使用其他输出的数字或文本运行它,像这样,它就可以工作。 问题答案: 使用代替。金额是数字,数字不加引号。

  • 我正在尝试使用maven protoc插件和我在Cygwin中构建的protoc可执行文件编译协议缓冲区代码。我无法从Cygwin或Windows命令行执行此操作。下面是我在Windows中运行它时得到的输出,但从Cygwin运行时的错误是相同的。我觉得这很奇怪,因为如果问题是路径转换,那么我希望其中一个可以工作。这个可执行文件是用Cygwin的g构建的,这可能会影响到事情吗?(显而易见,该目录确