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]
работал.