2017-09-10 14 views
1

저는 Python을 처음 사용하기 때문에 코드가 작동하지 않는 이유를 해결할 수 없습니다. ssh (paramiko 사용)를 통해 파일에 호스트 이름 목록별로 여러 서버에 연결하려고합니다.ssh를 사용하여 원격으로 명령 Python을 실행하십시오.

이상한 일이 발생합니다. 파일에 호스트 이름이 하나만있는 경우에만 코드가 작동합니다. 그 이상인 경우 코드가 작동하지 않습니다. 루프가 정상적으로 작동하는지 분명하게 알 수 있습니다.

당신이 저를 도울 수 있기를 바랍니다, 미리 감사드립니다!

코드 :

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() 

오류 :

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

루프 내에서'line'을 출력하여 그것이 여러분이 생각하는 것임을 확인하십시오. –

+0

네, IP 주소를 잘 인쇄했습니다. 감사합니다 – GarAnn

답변

0

MSDN 문서에 따르면

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

getaddrinfo 함수는 ANSI 호스트 이름에서 주소에 대한 프로토콜 독립적 인 변환을 제공합니다.

그리고 오류 코드 11001 :

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

호스트를 찾을 수 없습니다. 해당 호스트를 알 수 없습니다. 이름은 공식 호스트 이름 또는 별칭이 아니거나 쿼리되는 데이터베이스에서 찾을 수 없습니다. 이 오류는 프로토콜 및 서비스 쿼리에 대해 반환 될 수도 있으며 지정된 이름을 관련 데이터베이스에서 찾을 수 없음을 의미합니다.

잘못된 호스트 이름 (또는 존재하지 않는 호스트) 만 전달해야합니다.

+0

덕분에, 나는 호스트 이름으로 IP 주소를 대체하고, 이상한 일이 발생합니다. 파일에 한 줄 (하나의 호스트 이름)이 있으면 작동합니다. 둘 이상이면 동일한 오류가 발생합니다. 무엇이 될 수 있습니까? (그냥 루프를 점검하고 라인을 잘 인쇄하고 있음을 분명히해야합니다) – GarAnn

+0

확실하지 않습니다. 주소를 전달하는 방법 일 수 있습니다. 아니면 paramiko가 주소로 IPv4를 허용하지 않을 수도 있습니다. – lilezek

+0

예 ... ip에서 hostname으로 변경되었습니다. – GarAnn

0

좋아요, 해결했습니다. 문제는 목록의 값을 다음과 같이 읽는 것입니다. hostname \ n 오류의 원인과 파일에서 하나의 호스트 이름으로 작업 한 이유.