2016-05-17 6 views
0

プロセスプールをWindows上で動作させようとしていますが、パスワードを聞かれた後に、再度パスワードを要求します。Windowsのpython multisshプール

import os 
import sys 
import paramiko 
import getpass 
import socket 
from multiprocessing import Pool 


def processFunc(hostname): 
handle = paramiko.SSHClient() 
handle.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
handle.connect(hostname, username=user, password=pw) 
print("child") 
stdin, stdout, stderr = handle.exec_command("show clock") 
cmdOutput = "" 
while True: 
    try: 
cmdOutput += stdout.next() 
    except StopIteration: 
    break 
    print("Got output from host %s:%s" % (hostname, cmdOutput)) 
    handle.close() 

user = "sup" 
f= open('csip.txt','r') 
    hostnames = [] 
for line in f: 
    hostname = line.strip() 
    hostnames.append(hostname) 
pw = getpass.getpass("Enter ssh password:") 

if __name__ == "__main__": 
    pool = Pool(processes=4) 
    pool.map(processFunc, hostnames, 1) 
pool.close() 
pool.join() 

何か問題がありますか?スクリプトは、txtファイルからホスト名を読み取ってパスワードを取得し、プロセスプールを呼び出す必要があります。

答えて

0

以下の作品 -

しかし、私は助けるが、それを改善したいです。ユーザー名とパスワードをハードコーディングする必要はありません。

import os 
import sys 
import paramiko 
from multiprocessing import Pool 

#Globals 
Hostnames = [] 
f= open('csip.txt','r') 
for line in f: 
hname = line.strip() 
Hostnames.append(hname) 


def processFunc(Hostname): 
    handle = paramiko.SSHClient() 
    handle.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    handle.connect(Hostname, username="sup", password="123") 
    print("child") 
    stdin, stdout, stderr = handle.exec_command("show platform | i unknown") 
    cmdOutput = "" 
    while True: 
    try: 
     cmdOutput += stdout.next() 
    except StopIteration: 
     break 
print("Got output from host %s:%s" % (Hostname, cmdOutput)) 
handle.close() 


if __name__ == "__main__": 
    pool = Pool(processes=9) 
    pool.map(processFunc, Hostnames, 1) 
    pool.close() 
    pool.join() 
関連する問題