2013-04-03 11 views
9

Ho un programma come questo:come rendere l'esecuzione di comandi SSH al timeout

ssh -q [email protected] exit 
echo "output value -->$?" 

Nel codice di cui sopra, sto cercando di SSH al server remoto, e cerca di verificare se posso collegare o no . Ho pochi server, la cui password è meno attiva e pochi server per i quali le password non sono ancora state disattivate. Quindi la mia preoccupazione, se c'è una password, si bloccherà nella stessa schermata chiedendo la password e sarà lì per un tempo infinito, senza logica di uscita.

Domanda: Come implementare i timer per il codice sopra, e se rimane nella stessa schermata per chiedere la password. e uscire con un po 'il codice di errore

2) Quando eseguo il codice di cui sopra, ottengo i seguenti codici di errore:

127 -- > I guess its for success 
225 -- > for any error. 

ci sono altri codici di errore diverso da quello di cui sopra?

+0

http://www.eldos.com/documentation/sbb/documentation/ref_err_ssherrorcodes.html, trovato un collegamento, – gmhk

+0

Non sbattere se la password non viene fornita e l'autenticazione basata su chiave non è impostata. L'uso prevede script. (Cerca ssh + expect su google/stackoverflow, per uno script modello.) – anishsane

+4

use -o PasswordAuthentication = no – Vorsprung

risposta

14

È possibile mettere la chiamata su ssh utilizzando il comando timeout. Il comando timeout termina con il codice 124 se si verifica un timeout.

timeout 10s ssh -q [email protected] exit 
if [ $? -eq 124 ]; then 
    echo "Timeout out" 
fi 

O, come Vorsprung ha commentato la tua domanda (come stavo guardando la pagina man!):

ssh -oPasswordAuthentication=no -q [email protected] exit 

che non consentire l'autenticazione della password interattivo. Dovresti quindi controllare il codice di uscita.

+0

ssh -oPasswordAuthentication = no -q [email protected] exit -> this work – gmhk

+0

@gmhk - non dimenticare di fare clic sul segno di spunta per la risposta che ti ha aiutato di più. – ghoti

2

Sembra che la domanda sia l'elaborazione di 'modalità batch' su un numero di host contemporaneamente (ad es. In un ciclo). Il seguente comando ssh fallirà semplicemente se PKA è non configurato per un determinato host (autenticazione a chiave pubblica - il login "senza password" menzionato la domanda originale), quindi è buono per gli script che si desidera continuare a eseguire indipendentemente dai problemi di connessione a uno o due host. Inoltre non si preoccuperà di tutte le domande su "sei sicuro di voler continuare a connetterti" con gli host precedentemente sconosciuti (o puoi semplicemente aggiungere StrictHostKeyChecking no al tuo ~/.ssh/config per quello). Ad esempio,

for host in host1 host2 host3 # etc 
do 
    ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=5 \ 
     [email protected]$host 'uptime' || echo "problem: host=$host" 
done 

Dovrai controllare la tua pagina (client) ssh uomo per vedere se sono supportate le seguenti opzioni (BatchMode, ConnectTimeout), però.

Problemi correlati