2017-09-10 2 views
1

Ich bin neu bei Python und ich kann nicht den Grund, warum mein Code nicht funktioniert. Ich versuche, eine Verbindung zu mehreren Servern durch Hostnamen Liste in einer Datei über SSH (mit Paramiko).Mit ssh Remote-Befehl ausführen Python

Etwas seltsam passiert, der Code funktioniert nur, wenn es einen Hostnamen in der Datei gibt, wenn es mehr als das hat, funktioniert es nicht. nur um klar zu sein, die Schleife funktioniert gut.

hoffe du kannst mir helfen, danke im voraus!

Der Code:

import sys 
import os 
import paramiko 

client=paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

username='yadayada' 
password='ladida' 
ipFile=open("C:\Users\garmiza\Documents\Scripts\TrapToHpsimLinuxIPList.txt","r") 


for line in iter(ipFile): 
    print "sending trap from " + line 
    client.connect(line,username=username,password=password) 
    command="snmptrap -v 1 -c public 16.19.203.96 enterprises.232 {clientIP} 6 11003 0".format(clientIP=line) 
    stdin, stdout, stderr = client.exec_command(command) 


ipFile.close() 

Die Fehler:

File "C:/Users/zaza/PycharmProjects/linuxTrapSending/linuxTrapSending.py", line 16, in <module> 

    client.connect(line,username=username,password=password) 
    File "C:\Python27\lib\site-packages\paramiko\client.py", line 301, in connect 
    to_try = list(self._families_and_addresses(hostname, port)) 
    File "C:\Python27\lib\site-packages\paramiko\client.py", line 199, in _families_and_addresses 
    hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM) 
socket.gaierror: [Errno 11001] getaddrinfo failed 

Process finished with exit code 1 
+0

In Ihrer Schleife, drucken Sie "line", um sicherzustellen, dass es ist, was Sie denken, dass es ist. –

+0

Ja, habe ich, Drucken der IP-Adressen in Ordnung. danke – GarAnn

Antwort

0

Laut MSDN-Dokumentation:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms738520(v=vs.85).aspx

Die Funktion getaddrinfo ermöglicht eine protokollunabhängige Übersetzung von einem ANSI-Hostnamen in eine Adresse.

und der Fehlercode 11001:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx#WSAHOST_NOT_FOUND

-Host nicht gefunden. Kein solcher Host ist bekannt. Der Name ist kein offizieller Hostname oder Alias ​​oder wird nicht in den Datenbanken gefunden, die abgefragt werden. Dieser Fehler wird möglicherweise auch für Protokoll- und Dienstabfragen zurückgegeben und bedeutet, dass der angegebene Name nicht in der relevanten Datenbank gefunden wurde.

Sie müssen einen falschen Hostnamen übergeben (oder nur einen Host, der nicht existiert).

+0

danke, ich habe die ip-adresse durch den hosternamen ersetzt, und etwas komisches passiert. Wenn ich eine Zeile (einen Hostnamen) in der Datei habe, die es funktioniert, wenn ich mehr als eine habe, zeigt es genau den gleichen Fehler. Was könnte es sein? (nur um klar zu sein habe ich die Schleife überprüft und es ist der Druck der Linien einfach gut) – GarAnn

+0

Nicht sicher. Vielleicht die Art, wie du die Adresse passierst. Oder vielleicht akzeptiert paramiko keine IPv4 als Adresse. – lilezek

+0

yeah ... Ich habe von IP zu Hostname geändert – GarAnn

0

OK, ich habe es gelöst. Das Problem besteht darin, dass die Werte in einer Liste wie folgt abgerufen werden: Hostname \ n, was den Fehler verursacht hat und warum er mit einem Hostnamen in einer Datei funktioniert hat.