【问题标题】:"getaddrinfo" error when trying to establish an SSH connection using Python Paramiko尝试使用 Python Paramiko 建立 SSH 连接时出现“getaddrinfo”错误
【发布时间】:2011-07-15 03:43:56
【问题描述】:

我正在尝试使用 Paramiko 与服务器建立连接,但该连接失败并显示以下输出

Traceback (most recent call last):
  File "C:\ucatsScripts\cleanUcatsV2.py", line 13, in <module>
    ssh.connect(host,username,password)
  File "C:\Python27\lib\site-packages\paramiko-1.7.6-py2.7.egg\paramiko\client.py", line 278, in connect
    for (family, socktype, proto, canonname, sockaddr) in socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
socket.gaierror: [Errno 10109] getaddrinfo failed

这是我正在使用的代码

import paramiko
import cmd
import sys

# Connect to Server
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy())

success = ssh.connect('MASKED',username='MASKED',password='MASKED')
if (success != True):
    print "Connection Error"
    sys.exit()
else:
    print "Connection Established"

有什么想法吗?

【问题讨论】:

  • hostnamessh.connect 的参数格式是什么?如果您在主机名的末尾添加了一个端口,则需要将其作为单独的参数传递。
  • 另外,您的 if (success != True): 块将无用,因为 paramiko.SSHClient.connect 不返回值。

标签: python ssh paramiko


【解决方案1】:

只需在主机后添加端口即可设置:

ssh.connect('MASKED', 22, username='MASKED',password='MASKED')

顺便说一句,正如 robots.jpg 所说,connect 方法不返回任何内容。它触发exceptions,而不是返回值。

这是一个更完整的例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import paramiko, os, string, pprint, socket, traceback, sys

time_out = 20 # Number of seconds for timeout
port     = 22
pp = pprint.PrettyPrinter(indent=2)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

file = open( "file.txt", "r" )
# NOTE: The file contains:    
# host  user  current_password

array = []

for line in file:
  array = string.split(line.rstrip('\n'),)
#  pp.pprint(array)
  try:
    ssh.connect(array[0], port, array[1], array[2], timeout=time_out)
    print "Success!! -- Server: ", array[0], "   Us: ", array[1]
  except paramiko.AuthenticationException:
    print "Authentication problem   -- Server: ", array[0], "   User: ", array[1]
    continue
  except socket.error, e:
    print "Comunication problem    -- Server: ", array[0], "   User: ", array[1]
    continue
  ssh.close()

file.close()

代码需要一些润色,但它可以完成工作。

【讨论】:

    【解决方案2】:

    您确定主机名解析为 IP 地址吗?在你的机器上试试ping that_hostname 看看。

    【讨论】:

      【解决方案3】:

      小心你的主机名上没有用户名

      ssh.connect(hostname='user@example.com', port=22)
      

      user@example.com 不是适合连接的主机名参数。

      你应该使用:

      ssh.connect(hostname='example.com', port=22, username='user')
      

      【讨论】:

        【解决方案4】:

        您需要对 DNS 进行一些更改。 转到网络连接-> IPv4-> 高级设置-> DNS,然后选中附加这些 DNS 后缀,然后输入您的机器 dns。 这对我有用。无论如何,此错误来自以太网设置。 祝你好运 !

        【讨论】:

          猜你喜欢
          • 2017-04-10
          • 1970-01-01
          • 1970-01-01
          • 2017-07-29
          • 1970-01-01
          • 2016-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多