2015-08-27 19 views
5

Riepilogo: Impossibile automatizzare i comandi nel passo d'uomo di Twisted. Cerco soluzioni/consigli.Scripting con il tombino di Twisted

Twisted ha una grande funzionalità chiamata botola. Permette all'utente di ssh su un server Twisted attualmente in esecuzione e di ispezionare/interagire con i suoi interni.

Mi piacerebbe fare degli script con questo. Collegamento a chiusini richiede semplicemente

ssh localhost -p 12345 

e quindi l'utente è caduto in un interprete Python con accesso al processo in esecuzione.

Solitamente con ssh si può eseguire un comando sul server remoto ed uscire, ad es.

ssh [email protected] 'ls' 

eseguirà 'ls' nella directory di accesso e quindi la connessione ssh verrà chiusa.

vorrei realizzare qualcosa di simile

ssh localhost -p 12345 'print "hello, world"' 

a passo d'uomo, ma invece ho ricevere (con ssh verbose):

debug1: Authentication succeeded (password). 
debug1: channel 0: new [client-session] 
debug1: Entering interactive session. 
debug1: Sending environment. 
debug1: Sending env LANG = en_US.UTF-8 
debug1: Sending command: print "Hello world" 
exec request failed on channel 0 

qualche cosa che posso automatizzare le operazioni sul passo d'uomo?

+0

Hai provato "echo" print "Hello World" "| ssh localhost -p 12345'? –

+0

Il risultato (utilizzando ssh -v per il debug dettagliato): 'root @ password localhost: debug1: autenticazione riuscita (password). debug1: canale 0: nuovo [sessione client] debug1: accesso alla sessione interattiva. debug1: ambiente di invio. debug1: Invio env LANG = en_US.UTF-8 richiesta shell non riuscita sul canale 0' – ChaimKut

risposta

3

Il motivo per cui ssh localhost -p 12345 print 'Hello world' non riesce è che "print 'Hello world'" viene inviato come richiesta "exec" che deve eseguire il comando. Il tuo server (passo d'uomo) non supporta quello (ovviamente).

È necessario alimentare invece l'input standard dell'interprete python. Per esempio:

ssh -tt localhost -p 12345 << EOS 
print "Hello world" 
EOS 

Nota -tt bandiera - Costringe ssh di destinare tty indipendentemente il dispositivo di input non è TTY. Senza -tt riceverai l'errore "richiesta di shell non riuscita sul canale".