2013-02-27 26 views
2

連接我需要在多臺服務器上運行一個命令,我使用下面的代碼:蟒蛇的paramiko用的FileInput



    import paramiko, getpass, fileinput 

    username = raw_input("Enter your username [%s]: " % getpass.getuser()) 
    passwd = getpass.getpass("Enter your password: ") 
    serverlist = raw_input("Enter the server list file path with filename: ") 

    for line in fileinput.input([serverlist]): 
     paramiko.util.log_to_file('paramiko.log') 
     s = paramiko.SSHClient() 
     #s.load_system_host_keys() 
     s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     s.connect(line, 22, username, passwd) 
     stdin, stdout, stderr = s.exec_command('uptime') 
     print stdout.read() 
     s.close() 

但是,此代碼生成以下錯誤信息:



    Traceback (most recent call last): 
     File "test_paramiko.py", line 15, in 
     s.connect(line, 22, username, passwd) 
     File "/usr/lib/python2.6/site-packages/paramiko/client.py", line 277, in connect 
     socket.getaddrinfo(hostname, port): 
    socket.gaierror: [Errno -2] Name or service not known 

我不知道我在這裏錯過了什麼。請幫忙!

回答

2

您可能從serverlist得到未知的主機名。添加如下內容:

print('Connecting with "%s"...' % (line)) 

該名稱可以包含CR,LF,空格或爲空。覈實。如果有新行再使用

hostname = line.strip() 
print('Connecting with "%s"...' % (hostname)) 
s.connect(hostname, 22, username.strip(), passwd.strip()) 

這同樣適用於usernamepasswd變量。但請確保您的用戶名和密碼不能以空格或其他空格結尾。您可以使用rstrip()而不是strip()

+1

是的,使用'strip()'或'rstrip()'字符串方法。 – 2013-02-27 10:47:32

+0

非常感謝,修正了問題。 – SGL 2013-02-27 10:51:17