Python paramiko.ssh_exception.SSHException : No existing session

标签 python ssh paramiko

此站点的示例代码 (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, port, username, 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, port, username, 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 连接代码。
更新
>>> ssh.connect(host, port, username, password, look_for_keys=False, allow_agent=False)
>>> 
引用:https://github.com/ktbyers/netmiko/issues/1034

最佳答案

该代码对我有用。

我在 auth_password 中遇到错误当我在 Pageant 中加载了一个 key 时(虽然不同——“身份验证失败”)。在 Paramiko 尝试使用 Pageant key 后,Rebex 测试服务器似乎关闭了 session 。然后连续的密码认证失败。我想在你的情况下这将是一个类似的问题。不同的错误消息可能只是由于时间差异。

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', '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'] 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-sha2-256-etm@openssh.com', 'hmac-sha2-512', 'hmac-sha2-256', 'hmac-sha1', '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.

如果您想避免尝试选美,请使用 allow_agent SSHClient.connect 的参数:
ssh.connect(host, port, username, password, allow_agent=False)

强制警告:请勿使用 AutoAddPolicy - 您正在失去对 MITM attacks 的保护通过这样做。有关正确的解决方案,请参阅 Paramiko "Unknown Server" .

关于Python paramiko.ssh_exception.SSHException : No existing session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63821224/

相关文章:

Python:self.__class__ vs. type(self)

PyQt4 的 Python 导入失败

python - 使用 Python SSH 在远程服务器上运行应用程序

python - Bash 认为字符串没有被正确引用?

python - Paramiko 等效于管道控件和输入/输出管道

python 正则表达式删除除 www 之外的所有连续重复项

colors - 在 ssh 之前导出 TERM

bash - docker 如何在运行容器中运行bash\ssh(运行-d)?

go - 如何关闭或清理标准输出管道?

python - 如何使用特定配置文件 Selenium Python geckodriver 启动 Firefox