Ricerca nel sito web

Esercitazione di esempio SSH di script Expect


Expect script è un'ottima utility per Linux/Unix. Ho a che fare con molti server unix nella mia vita quotidiana, che sia al lavoro o sia il mio server di hosting. Quindi ho bisogno di ricordare molti utenti SSH, le loro password e poi gli utenti e le password SU. È un po' disordinato quando il numero di server è enorme. Quindi ho pensato di scrivere uno script che mi acceda automaticamente al server. Quando ho iniziato a lavorare su questo, mi sono bloccato su come inserire la password SSH perché le normali shell unix non hanno alcun modo per inviare la password quando viene richiesto il login. Poi vengo a conoscenza di expect script che permette di automatizzare l'interazione con programmi che aprono un terminale per l'input.

Aspettatevi sceneggiatura

Aspettatevi un esempio SSH di script

Ecco lo script che ho creato per accedere automaticamente al server SSH e quindi accedere con super utente ed eseguire un semplice comando. sshsudologin.expect

#!/usr/bin/expect

#Usage sshsudologin.expect <host> <ssh user> <ssh password> <su user> <su password>

set timeout 60

spawn ssh [lindex $argv 1]@[lindex $argv 0]

expect "yes/no" { 
	send "yes\r"
	expect "*?assword" { send "[lindex $argv 2]\r" }
	} "*?assword" { send "[lindex $argv 2]\r" }

expect "# " { send "su - [lindex $argv 3]\r" }
expect ": " { send "[lindex $argv 4]\r" }
expect "# " { send "ls -ltr\r" }
interact

Punti importanti su Expect Script

  1. Notare la prima riga che specifica che lo script di attesa verrà utilizzato come interprete.
  2. Prevedi che il timeout predefinito dello script sia di 10 secondi, quindi ho impostato il timeout su 60 secondi per evitare problemi di timeout se la richiesta di accesso richiede tempo.
  3. Notare il comando expect seguito dall'espressione regolare e poi cosa dovrebbe essere inviato come risposta. La prima scelta Sì/No viene aggiunta per assicurarsi che non fallisca se la chiave del server remoto non è già stata importata.
  4. Le altre espressioni regolari previste variano tra i server, per il mio server termina con \# ma per alcuni altri server potrebbe terminare con \$, quindi potrebbe essere necessario modificarlo di conseguenza. L'unica cosa da controllare è che l'espressione regolare per il comando prevede corrisponda, in modo che invii il comando o la password corrispondente.
  5. L'ultimo comando wait mostra solo che possiamo inviare comandi anche una volta effettuato l'accesso al server.

Ecco l'output quando eseguo lo script di attesa sopra con i parametri corretti.

pankaj@Pankajs-MacBook-Pro:~$/Users/pankaj/scripts/sshloginsudo.expect 'journaldev.com' 'pankaj' 'ssh_pwd' 'su_user' 'su_pwd'
spawn ssh pankaj@journaldev.com
pankaj@journaldev.com's password: 
Last login: Sun Jun  9 19:54:17 2013 from c-67-161-57-160.hsd1.ca.comcast.net
pankaj@journal [~]# su - su_user
Password: 
su_user@journal [~]# ls -ltr
total 708
...

Suggerimenti extra sullo script di attesa

  1. Lo script di attesa può essere riutilizzato poiché tutte le informazioni vengono passate come argomenti, quindi è meglio creare alias per ognuno di essi per un accesso rapido e risparmiare tempo nella digitazione di tutti i parametri. Ad esempio, alias journal=/Users/pankaj/scripts/sshloginsudo.expect journaldev.com pankaj ssh_pwd su_user su_pwd
  2. È sempre meglio usare le virgolette singole per passare gli argomenti, poiché la maggior parte delle volte le password contengono caratteri speciali che possono causare risultati strani se non sono virgolette.

NOTA: lo script sopra è testato su sistemi Mac OS e Linux. Riferimento: pagina SourceForge