4

我在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

这是什么原因造成的?谢谢

4

3 回答 3

0

尝试给予ssh.connect(hostname=host, username=username, password=password)

于 2012-12-18T12:29:32.147 回答
0

由于我的评论没有多大意义(将它们放在一起)(假设您的操作系统是 Linux)-

您错误的原因 -

ssh:无法解析主机名 localhost:名称或服务未知

是 - HOSTNAME 的 DNS 解析没有提供正确的 IP(注释#1)

使用此命令(终端)进行测试-

主机 本地主机

你可以尝试什么 -

编辑 /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$挖掘主机名

  • 获取 HOSTNAME 的 IP
  • 尝试使用 IP 而不是 HOSTNAME 连接到 HOST

始终使用相同的工作流程来获取用户提供的 HOSTNAME 的最新 IP,使用 IP 而不是 HOSTNAME 进行连接

于 2012-12-18T12:40:59.713 回答
0

实际上,当主机可以解决时,这甚至不起作用。

第一次尝试:

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

如果 google.com 返回带有地址的元组并且 localhost 也正确返回 - 那么您的系统设置是正确的。我不知道为什么,但我遇到了这个问题并且通过了socket.getaddrinfo(host, None)[0][1][4]

于 2018-02-20T15:40:00.337 回答