python paramiko, ошибка getaddrinfo при попытке установить соединение SSH - PullRequest
8 голосов
/ 14 марта 2011

Используя 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"

есть идеи?

Ответы [ 4 ]

9 голосов
/ 29 апреля 2011

Просто добавьте порт после хоста, и вы установите:

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

Кстати, как сказал robots.jpg, метод connect ничего не возвращает.Вместо того, чтобы возвращать значения, он вызывает исключения .

Вот более полный пример:

#!/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()

Код требует некоторой полировки, но он выполняет свою работу.

0 голосов
/ 14 февраля 2018

Вам нужно внести некоторые изменения в DNS.Перейдите в раздел Сетевые подключения -> IPv4-> Расширенные настройки -> DNS, затем установите флажок Добавить эти суффиксы DNS и введите DNS своего компьютера.Это сработало для меня.В любом случае эта ошибка происходит из-за настроек Ethernet.Удачи !

0 голосов
/ 17 февраля 2017

Будьте осторожны, чтобы имя пользователя не было на вашем хосте

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

user@exemple.com не является параметром имени хоста, который подходит для соединения

вы должны использовать:

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

0 голосов
/ 18 января 2013

Вы уверены, что имя хоста преобразуется в IP-адрес? Попробуйте ping that_hostname на вашем компьютере, чтобы увидеть.

...