如何解决Python paramiko.ssh_exception.SSHException:无现有会话
此站点的示例代码(https://www.kite.com/python/answers/how-to-ssh-using-paramiko-in-python)
host = "test.rebex.net"
port = 22
username = "demo"
password = "password"
command = "ls"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host,port,username,password)
stdin,stdout,stderr = ssh.exec_command(command)
lines = stdout.readlines()
print(lines)
应该产生此输出。
['aspnet_client\n','pub\n','readme.txt\n']
此演示站点的凭据运行正常
wolf@linux:~$ sshpass -p password ssh demo@test.rebex.net
Welcome to Rebex Virtual Shell!
For a list of supported commands,type 'help'.
demo@ETNA:/$
demo@ETNA:/$ ls
aspnet_client
pub
readme.txt
demo@ETNA:/$
但是,代码无法按预期运行。 ssh.connect(host,password)
行后出现错误。
>>> import paramiko
>>> host = "test.rebex.net"
>>> username = "demo"
>>> password = "password"
>>> port = 22
>>>
>>> command = "ls"
>>>
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect(host,password)
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "/home/wolf/.local/lib/python3.8/site-packages/paramiko/client.py",line 435,in connect
self._auth(
File "/home/wolf/.local/lib/python3.8/site-packages/paramiko/client.py",line 764,in _auth
raise saved_exception
File "/home/wolf/.local/lib/python3.8/site-packages/paramiko/client.py",line 751,in _auth
self._transport.auth_password(username,password)
File "/home/wolf/.local/lib/python3.8/site-packages/paramiko/transport.py",line 1498,in auth_password
raise SSHException("No existing session")
paramiko.ssh_exception.SSHException: No existing session
>>>
更新
>>> ssh.connect(host,password,look_for_keys=False,allow_agent=False)
>>>
参考:https://github.com/ktbyers/netmiko/issues/1034
解决方法
该代码对我有用。
当我在Pageant中加载了密钥时,我在auth_password
中也遇到了错误(尽管有所不同– “验证失败” )。在Paramiko尝试使用Pageant键后,Rebex测试服务器似乎关闭了会话。这样,连续的密码身份验证将失败。我猜这将是一个类似的问题。不同的错误消息可能只是由于时间差异而引起的。
starting thread (client mode): 0x33629f0
Local version/idstring: SSH-2.0-paramiko_2.6.0
Remote version/idstring: SSH-2.0-RebexSSH_5.0.7448.0
Connected (version 2.0,client RebexSSH_5.0.7448.0)
kex algos:['curve25519-sha256','curve25519-sha256@libssh.org','ecdh-sha2-nistp521','ecdh-sha2-nistp384','ecdh-sha2-nistp256','diffie-hellman-group16-sha512','diffie-hellman-group15-sha512','diffie-hellman-group-exchange-sha256','diffie-hellman-group14-sha256','diffie-hellman-group14-sha1','diffie-hellman-group-exchange-sha1'] server key:['ssh-ed25519','ecdsa-sha2-nistp256','rsa-sha2-512','ssh-rsa-sha256@ssh.com','rsa-sha2-256','ssh-rsa'] client encrypt:['aes256-gcm@openssh.com','aes128-gcm@openssh.com','aes256-ctr','aes256-cbc','aes192-ctr','aes192-cbc','aes128-ctr','aes128-cbc','chacha20-poly1305@openssh.com','twofish256-ctr','twofish192-ctr','twofish128-ctr','twofish256-cbc','twofish192-cbc','twofish128-cbc','twofish-cbc','3des-ctr','3des-cbc'] server encrypt:['aes256-gcm@openssh.com','3des-cbc'] client mac:['hmac-sha2-512-etm@openssh.com','hmac-sha2-256-etm@openssh.com','hmac-sha2-512','hmac-sha2-256','hmac-sha1','hmac-sha1-96'] server mac:['hmac-sha2-512-etm@openssh.com','hmac-sha1-96'] client compress:['none'] server compress:['none'] client lang:[''] server lang:[''] kex follows?False
Kex agreed: curve25519-sha256@libssh.org
HostKey agreed: ssh-ed25519
Cipher agreed: aes128-ctr
MAC agreed: hmac-sha2-256
Compression agreed: none
kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
Switch to new keys ...
Adding ssh-ed25519 host key for test.rebex.net: b'e7e445c6b8e4bbd868892786fd0158f0'
Trying SSH agent key b'3f3ae3e3b0e0ef4e5b4bfe93613557d4'
userauth is OK
Authentication (publickey) failed.
Disconnect (code 2): Authentication is already in progress.
如果要避免尝试Pageant,请使用SSHClient.connect
的allow_agent
参数:
ssh.connect(host,port,username,password,allow_agent=False)
强制性警告:请勿使用AutoAddPolicy
-这样做会失去对MITM attacks的保护。有关正确的解决方案,请参见Paramiko "Unknown Server" 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。