[Python] Paramiko - Ciclo for e Array (script)
Marco De Paoli
depaolim a gmail.com
Mar 6 Ott 2015 14:29:19 CEST
ciao Remo,
2015-10-06 12:40 GMT+02:00 Remo Cosini <redmine.csi a gmail.com>:
> Salve a tutti,
> sono nuovo di python e finora sono riuscito a cavarmela da autodidatta.
> Ho trovato uno script (che fa uso di paramiko) e l'ho modificato secondo
> mie esigenze. Avevo necessità di testare degli accessi SSH (con user e pwd
> già cablata) partendo da un array e mettendo
> il tutto dentro un ciclo, ma sembra non andare, l'errore che leggo è il
> seguente:
>
> Could not SSH to ['localhost', '127.0.0.1'], waiting for it to start
> Could not connect to ['localhost', '127.0.0.1']. Giving up
>
> Sembra non prendere i valori host uno per volta, ma tutti insieme, ecco lo
> script:
>
> import sys
> import time
> import select
> import paramiko
> i = 1
> host = ['localhost', '127.0.0.1', '192.168.2.2']
> for item in host:
>
da questo momento in poi dovresti usare "item" e non "host"
while True:
> print 'Trying to connect to %s (%i/3)' % (host, i)
> try:
> ssh = paramiko.SSHClient()
>
> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
> ssh.connect(host, port=22, username='centos',
> password='reverse')
>
qui usi "host", ma dovevi usare "item"
> print "Connected to %s" % host
> break
> except paramiko.AuthenticationException:
> print "Authentication failed when connecting to
> %s" % host
> sys.exit(1)
> except:
>
ti consiglio di evitare l'except "senza niente"
https://realpython.com/blog/python/the-most-diabolical-python-antipattern/
> print "Could not SSH to %s, waiting for it to
> start" % host
> i += 1
> time.sleep(2)
> # If we could not connect within time limit
> if i == 3:
> print "Could not connect to %s. Giving up" % host
> sys.exit(1)
> # Send the command (non-blocking)
> stdin, stdout, stderr = ssh.exec_command("uname")
> # Wait for the command to terminate
> while not stdout.channel.exit_status_ready():
> # Only print data if there is data to read in the channel
> if stdout.channel.recv_ready():
> rl, wl, xl = select.select([stdout.channel], [],
> [], 0.0)
> if len(rl) > 0:
> # Print data from stdout
> print '-------------------------------'
> print stdout.channel.recv(1024),
> # Send the command (non-blocking)
> stdin, stdout, stderr = ssh.exec_command("hostname")
> # Wait for the command to terminate
> while not stdout.channel.exit_status_ready():
> # Only print data if there is data to read in the channel
> if stdout.channel.recv_ready():
> rl, wl, xl = select.select([stdout.channel], [],
> [], 0.0)
> if len(rl) > 0:
> # Print data from stdout
> print stdout.channel.recv(1024),
> # Send the command (non-blocking)
> stdin, stdout, stderr = ssh.exec_command("hostname -I")
> # Wait for the command to terminate
> while not stdout.channel.exit_status_ready():
> # Only print data if there is data to read in the channel
> if stdout.channel.recv_ready():
> rl, wl, xl = select.select([stdout.channel], [],
> [], 0.0)
> if len(rl) > 0:
> # Print data from stdout
> print stdout.channel.recv(1024),
> print '-------------------------------'
> #
> # Disconnect from the host
> #
> print "Command done, closing SSH connection."
> ssh.close()
>
> Qualcuno mi illumina?
>
ciao,
Marco
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20151006/4b068428/attachment.html>
Maggiori informazioni sulla lista
Python