Paramiko в windows с cygwin openssh не находит файлы known_hosts

У меня есть установка, в которой я хочу подключиться с виртуальной машины Windows7 к серверу Linux через SSH без пароля с частными / открытыми ключами.

Соединение SSH отлично работает через терминал Cygwin.

С Paramiko я могу подключиться от моего клиента к моему хосту, если я принимаю отсутствующие ключи хоста, но если я попытаюсь использовать вместо этого known_hosts, я получаю сообщение об ошибке:

Server XXX not found in known_hosts.

Может ли Парамико вообще читать файл known_hosts в Windows / Cygwin? Могу я как-нибудь указать путь?

Моя папка .ssh находится в папке C:\cygwin64\home\<user>\.ssh.

Большое спасибо за вашу помощь,
Томас

Обратите внимание, что "соединение без пароля" не имеет ничего общего с "файл known_hosts".

Martin Prikryl 31.10.2018 13:30

Где физически находится ваша папка cygwin .ssh?

Martin Prikryl 31.10.2018 13:30

Привет, Мартин, спасибо за ответ. Я понимаю, что отсутствие пароля не имеет к этому никакого отношения, я просто упомянул об этом, потому что это мой реальный вариант использования. В противном случае я мог бы просто использовать мои текущие настройки, автоматически добавить отсутствующие файлы хоста и указать пароль. Если я автоматически добавляю только недостающие файлы хоста без ввода пароля, я получаю ошибку «Нет доступных методов аутентификации».

Thomas J. 31.10.2018 14:51

Моя папка .ssh находится в C: \ cygwin64 \ home \ <user> \ .ssh

Thomas J. 31.10.2018 14:53
1
4
677
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы используете SSHClient.load_system_host_keys.

По умолчанию методы загружают файл os.path.expanduser('~/.ssh/known_hosts'). Что не соответствует вашему расположению C:\cygwin64\home\<user>\.ssh, так как в Windows os.path.expanduser использует переменную среды USERPROFILE, которая указывает на C:\Users\<user>.


Вы можете исправить это:

  • Каким-то образом изменить конфигурацию Cygwin (но это может сломать другие вещи);
  • или создание соединения каталогов от C:\Users\<user>\.ssh к C:\cygwin64\home\<user>\.ssh (вероятно, наиболее переносимое решение);
  • или явное указание аргумента filename при вызове SSHClient.load_system_host_keys (не переносится);
  • или установите переменную среды HOME так, чтобы она указывала на C:\cygwin64\home\<user> перед запуском вашего скрипта Python - os.path.expanduser предпочитает HOMEUSERPROFILE - и Windows не использует HOME (может сломать другие вещи).

Создание соединения каталогов не сработало, потому что путь расширяется до 'C: \\ Users \\ <user> /.ssh/known_hosts', поэтому я в конечном итоге указал имя файла напрямую. Так как Paramiko имеет ту же проблему для файла закрытого ключа, параметр key_filename должен быть установлен с указанием местоположения закрытого ключа. Спасибо за вашу помощь, теперь он работает отлично

Thomas J. 31.10.2018 16:40

OK. Хотя до сих пор не понимаю, почему не сработало соединение каталогов.

Martin Prikryl 31.10.2018 16:41

Другие вопросы по теме