Paramiko подключается только к IP-адресу, а не к имени хоста в Python?

У меня есть такая функция в Python:

def test_ssh(host, username, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, username=username, password=password)

Проблема в следующем:test_ssh('127.0.0.1', 'root', 'hello') работает

Но test_ssh('localhost', 'root', 'hello') не работает

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

ssh: Could not resolve hostname localhost: Name or service not known

Что вызывает это? Спасибо

3 ответа

Решение

Поскольку мои комментарии не имеют большого смысла (объединяя их все вместе) (при условии, что ваша ОС - Linux) -

Причина вашей ошибки -

ssh: не удалось разрешить имя хоста localhost: имя или служба не известны

Is - DNS-разрешение HOSTNAME не предоставляет правильный IP (комментарий № 1)

Проверить с помощью этой команды (терминал) -

хост localhost

То, что вы можете попробовать -

Отредактируйте файл / etc / hosts, укажите IP и имя хоста в этом файле. Это должно разрешить ваше имя хоста и IP как этот -

#IP имя хоста [[alias1] [...]]
127.0.0.1 localhost
172.22.0.9 mymachine.home mymachine

Наконец-то отличная ссылка - http://bit.ly/IHhA1R

РЕДАКТИРОВАТЬ

Возможный рабочий процесс -

  • Пользователь регистрируется, входит в HOSTNAME
  • Мы запускаем команду (с python мы можем использовать os.subprocess или os.popen) -

bash $ dig HOSTNAME

  • Получить IP-адрес хоста
  • Попробуйте подключиться к HOST с IP вместо HOSTNAME

Всегда используйте один и тот же рабочий процесс, чтобы получить последний IP-адрес HOSTNAME, предоставленный пользователем, подключаться, используя IP вместо HOSTNAME

Попробуйте дать ssh.connect(hostname=host, username=username, password=password)

На самом деле это может даже не работать, когда хост может быть решен.

Первая попытка:

import socket
socket.getaddrinfo('google.com', None)
socket.getaddrinfo('localhost', None)

Если google.com возвращает кортеж с адресом и localhost также возвращает корректно - значит, ваша система настроена правильно. Я не знаю почему, но у меня была эта проблема и прохождение socket.getaddrinfo(host, None)[0][1][4] работал.

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