«Не найден хост-ключ для хоста *****» при подключении к SFTP-серверу с помощью pysftp с использованием закрытого ключа - PullRequest
0 голосов
/ 20 декабря 2018

Поэтому у меня много проблем с подключением к удаленному серверу через SFTP.Я попробовал нормальный способ, как показано ниже.

sftp = pysftp.Connection(host='Host',username='username',password='passwd',private_key=".ppk")

, который не работал.Я получил следующую ошибку:

SSHException: Хост-ключ для хоста ***** не найден.

Затем я попробовал следующее:

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
s = pysftp.Connection(host='host', username='user', password='password', cnopts=cnopts)

Что тоже не сработало.Я получил следующую ошибку:

BadAuthenticationType: ('Неверный тип аутентификации', ['publickey']) (allow_types = ['publickey'])

Также когдаЯ запускаю следующее:

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("host",username = "username",password = "password")
ssh_session = client.get_transport().open_session()

Я получаю ту же ошибку:

BadAuthenticationType: ('Неверный тип аутентификации', ['publickey']) (allow_types = ['publickey'])

1 Ответ

0 голосов
/ 20 декабря 2018

Вы путаете закрытый ключ, используемый для аутентификации, и ключ хоста, используемый для проверки идентификации сервера.Об обоих нужно позаботиться, в то время как все ваши попытки кода заботятся только об одном из них.См. мою статью о парах ключей SSH , чтобы понять разницу.

Так что это должно "сработать":

# Accept any host key (still wrong see below)
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
# And authenticate with private key
sftp = pysftp.Connection(
    host='Host', username='username', password='passwd', private_key=".ppk", cnopts=cnopts)

Но этот код будетфактически слепо принимать любой ключ хоста, что является недостатком безопасности.
Для правильного подхода см. Проверка ключа хоста с помощью pysftp .

...