Paramiko no существующее исключение сеанса
Используя интерактивную оболочку python и opensh, выполняемую локально, я продолжаю получать исключение "No existing session" с использованием paramiko. Мой код ниже.
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username=name,password=pw)
Результаты в:
No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/client.py", line 332, in connect
self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
File "/usr/local/lib/python2.6/dist-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/client.py", line 493, in _auth
raise saved_exception
paramiko.SSHException: No existing session
Я смог подключиться ранее, но пытался настроить это, чтобы разрешить авторизацию на основе ключа. Это не удалось, и с тех пор я не смог подключиться локально. Я попытался перезапустить openssh и успешно подключиться к другому серверу. После поиска здесь все, что я нашел, - это упоминания об исключениях авторизации, которые здесь не выглядят.
Ответы
Ответ 1
Поскольку у вас уже есть пароль, вам не нужно разговаривать с агентом или искать секретные ключи, хранящиеся на вашем компьютере. Поэтому попробуйте передать дополнительные параметры allow_agent
, look_for_keys
:
ssh.connect('localhost',username=name,password=pw,allow_agent=False,look_for_keys=False)
Ответ 2
У меня был открытый ключ с ключевой фразой в моем списке ssh-add. Как только я удалил его, я смог правильно выполнить свой w370 > на основе paramiko.
В список:
ssh-add -l
Чтобы удалить все:
ssh-add -D
Чтобы добавить:
ssh-add /FULL/PATH/TO/id_rsa
Ответ 3
https://bugs.launchpad.net/paramiko/+bug/912123
Какую ОС вы используете?
Возможно, вы можете проверить свою переменную env:
SSH_AUTH_SOCK
для "connect", он попытается использовать агент ssh.
в agent.py
self.conn = None
self.keys = ()
if ('SSH_AUTH_SOCK' in os.environ) and (sys.platform != 'win32'):
conn = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
conn.connect(os.environ['SSH_AUTH_SOCK'])
except:
# probably a dangling env var: the ssh agent is gone
return
self.conn = conn
elif sys.platform == 'win32':
import win_pageant
if win_pageant.can_talk_to_agent():
self.conn = win_pageant.PageantConnection()
else:
return
Ответ 4
Замените 'localhost' на '127.0.0.1'.