[Python] Python e SSH

Zanon Samuele webs86 a gmail.com
Gio 11 Ago 2016 18:11:30 CEST


Il giorno 11 agosto 2016 17:19, Manlio Perillo <manlio.perillo a gmail.com>
ha scritto:

> 2016-08-11 17:04 GMT+02:00 Manlio Perillo <manlio.perillo a gmail.com>:
> > 2016-08-11 16:47 GMT+02:00 Zanon Samuele <webs86 a gmail.com>:
> >>
> >> Ciao a tutti,
> >> sto realizzando un pannello per la gestione di alcuni processi interni
> >> all'ufficio utilizzando django e celery per la gestione della coda dei
> >> processi.
> >> Ora il mio problema è collegarmi ai server via SSH, eseguire una
> sequenza
> >> di comandi (alcuni anche come root, quindi ho la necessità di poter
> passare
> >> la password di root al comando su), catturare l'output di ciascun
> comando e
> >> salvare l'output su db.
> > [...]
> >> Potete darmi una mano a modificare quella classe per poter ottenere il
> >> risultato che mi aspetto? Oppure dirmi qualche altra libreria poter
> >> utilizzare?
> >>
> >
> > Come detto, l'organizzazione del codice è sbagliata.
> > Innanzitutto non capisco cosa faccia il codice.
> > Vuoi inviare un comando e ricevere la risposta?  In questo caso dovresti
> > utilizzare una coda (threading.Queue).
> >
>
> Se intendi gestire un solo comando alla volta, probabilmente non hai
> bisogno di complicarti la vita con i thread.
> Non eseguire process in un thread, ed invece aggiungi un metodo send_cmd
> che:
>
> 1) Alloca una shell se non è già stato fatto
> 2) Invia il comando alla shell
> 3) Legge la risposta
> 4) Restituisce la risposta
>
> Inoltre ti consiglio anche di evidenziare, nel codice, quali sono i
> metodi/funzioni pubblici e quali quelli privati.
> Nel tuo caso il metodo open_shell è privato, quindi rinominalo _open_shell.
>
>
> Ciao  Manlio
>

Ciao,
intanto grazie per le risposte. Cerco di essere più chiaro:
ho la necessità di effettuare delle operazioni su dei server.
Devo eseguire una serie di comandi, in sequenza, per poter eseguire
correttamente
queste operazioni (comandi tipo cd, eseguire script php...).
Per scopo di verifica ho la necessita di avere l'output di ogni singolo
comando, anche se vuoto.
Tutte le operazioni, sulla classe che ho linkato, le salvo su
 SSHBaseCommand.commands
che poi viene letto e crea i record su  un database postgres. Questo
avviene attraverso una
classe che estende SSHBaseCommand.

Ho provato a modificare SSHBaseCommand secondo i consigli di Manlio, ma
credo ci sia
qualcosa che mi sfugge: se eseguo un comando, anche un semplice "ls -la",
quello che
recupero in output è un qualcosa che non è quello che mi aspetto.
Per esempio ho provato a collegarmi al server, mi sposto su una cartella e
faccio ls -la

cmd = SSHCommand(server.host, server.ssh_user,
                 server.ssh_password)
cmd.send_cmd('cd /www/html')
cmd.send_cmd('ls -la')

In output vedo rispettivamente (un output per riga):
Last login Thu Aug 11 17:45:15 2016
Linux 3.2.29.\r\n

Ho aggiornato il gist con la nuova versione della classe.

Altra cosa: mi sarebbe utile avete l'exit code dei singoli comandi. Come
posso fare?

Ciao e grazie mille

_______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160811/2c579f8c/attachment-0001.html>


Maggiori informazioni sulla lista Python