Paramiko只连接到IP地址而不是Python中的主机名?

时间:2012-12-18 12:17:17

标签: python paramiko

我在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 个答案:

答案 0 :(得分:0)

尝试提供ssh.connect(hostname=host, username=username, password=password)

答案 1 :(得分:0)

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

您的错误原因 -

  

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

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

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

  

主机 localhost

你可以尝试什么 -

编辑 / etc / hosts 文件,在此文件中输入IP和主机名。这应该解决你的主机名和IP 喜欢这个 -

  

#IP hostname [[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

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

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

答案 2 :(得分:0)

实际上,当主机可以解决时,这甚至无效。

首先尝试:

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

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