2013-02-14 18 views
17

Nel mio codice ho il seguente comando per eseguire uno script remoto.Lo script ssh restituisce 255 errore

ssh [email protected] "sh /home/user/backup_mysql.sh" 

Per qualche motivo mi tiene su 255. Qualche idea?

posso tramite SSH proprio bene (tasti passless setup)

REMOTE SCRIPT:

MUSER='root' 
MPASS='123123' 
MHOST="127.0.0.1" 
VERBOSE=0 

### Set bins path ### 
GZIP=/bin/gzip 
MYSQL=/usr/bin/mysql 
MYSQLDUMP=/usr/bin/mysqldump 
RM=/bin/rm 
MKDIR=/bin/mkdir 
MYSQLADMIN=/usr/bin/mysqladmin 
GREP=/bin/grep 

### Setup dump directory ### 
BAKRSNROOT=/.snapshots/tmp 

##################################### 
### ----[ No Editing below ]------### 
##################################### 
### Default time format ### 
TIME_FORMAT='%H_%M_%S%P' 

### Make a backup ### 
backup_mysql_rsnapshot(){ 
     local DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" 
     local db=""; 
     [ ! -d $BAKRSNROOT ] && ${MKDIR} -p $BAKRSNROOT 
     ${RM} -f $BAKRSNROOT/* >/dev/null 2>&1 
#  [ $VERBOSE -eq 1 ] && echo "*** Dumping MySQL Database ***" 
#  [ $VERBOSE -eq 1 ] && echo -n "Database> " 
     for db in $DBS 
     do 
       local tTime=$(date +"${TIME_FORMAT}") 
       local FILE="${BAKRSNROOT}/${db}.${tTime}.gz" 
#    [ $VERBOSE -eq 1 ] && echo -n "$db.." 
       ${MYSQLDUMP} --single-transaction -u ${MUSER} -h ${MHOST} -p${MPASS} $db | ${GZIP} -9 > $FILE 
     done 
#    [ $VERBOSE -eq 1 ] && echo "" 
#    [ $VERBOSE -eq 1 ] && echo "*** Backup done [ files wrote to $BAKRSNROOT] ***" 
} 

### Die on demand with message ### 
die(){ 
     echo "[email protected]" 
     exit 999 
} 

### Make sure bins exists.. else die 
verify_bins(){ 
     [ ! -x $GZIP ] && die "File $GZIP does not exists. Make sure correct path is set in $0." 
     [ ! -x $MYSQL ] && die "File $MYSQL does not exists. Make sure correct path is set in $0." 
     [ ! -x $MYSQLDUMP ] && die "File $MYSQLDUMP does not exists. Make sure correct path is set in $0." 
     [ ! -x $RM ] && die "File $RM does not exists. Make sure correct path is set in $0." 
     [ ! -x $MKDIR ] && die "File $MKDIR does not exists. Make sure correct path is set in $0." 
     [ ! -x $MYSQLADMIN ] && die "File $MYSQLADMIN does not exists. Make sure correct path is set in $0." 
     [ ! -x $GREP ] && die "File $GREP does not exists. Make sure correct path is set in $0." 
} 

### Make sure we can connect to server ... else die 
verify_mysql_connection(){ 
     $MYSQLADMIN -u $MUSER -h $MHOST -p$MPASS ping | $GREP 'alive'>/dev/null 
     [ $? -eq 0 ] || die "Error: Cannot connect to MySQL Server. Make sure username and password are set correctly in $0" 
} 

### main #### 
verify_bins 
verify_mysql_connection 
backup_mysql_rsnapshot 
+0

Per qualche ragione il tuo * script * remoto restituisce 255, e ssh ti consegna il risultato. Che ne dici di mostrarci la sceneggiatura? –

+0

ha pubblicato lo script –

+1

Come avviso, non utilizzare le modifiche ai dati obsoleti per continuare a mettere la domanda in primo piano nella coda. Se lo fai di nuovo, bloccherò questa domanda. –

risposta

4

Se c'è un problema con l'autenticazione o connessione, come ad esempio non essere in grado di leggere una password il terminale, ssh uscirà con 255 senza essere in grado di eseguire il tuo script reale. Verifica per assicurarti di poter eseguire 'true' invece, per verificare se la connessione ssh è stata stabilita correttamente.

15

Ciò si verifica in genere quando il telecomando è inattivo/non disponibile; oppure la macchina remota non ha installato ssh; o un firewall non consente di stabilire una connessione all'host remoto.

ssh restituisce 255 quando si è verificato un errore o 255 viene restituito dallo script remoto:

EXIT STATUS 

    ssh exits with the exit status of the remote command or 
    with 255 if an error occurred. 

Di solito si farebbe con un qualcosa di messaggio di errore simile a:

ssh: connect to host host.domain.com port 22: No route to host 

O

ssh: connect to host HOSTNAME port 22: Connection refused 

Elenco di controllo:

  • Cosa succede se si esegue il comando ssh direttamente dalla riga di comando?

  • Siete in grado di ping quella macchina?

  • Condivide la distanza ha installato ssh?

  • Se installato, il servizio ssh è in esecuzione?

+0

SSH'ing funziona bene. –

+0

Quindi lo script eseguito sull'host remoto restituisce 255. –

+1

È difficile identificare * perché * il tuo script restituisce 255. Molto probabilmente è la funzione 'backup_mysql_rsnapshot' che ha la parte malfunzionante in quanto le altre due funzioni restituiscono 999 nel caso di fallimento. È possibile eseguire l'ssh su quella macchina e testare lo script? Puoi usare 'set -e' nel tuo script per eseguirne il debug. Lo script –

9

Questo errore si verifica anche quando si utilizza pdsh per gli host che non sono contenuti nel file "known_hosts".

sono stato in grado di correggere questo SSH'ing in ogni host manualmente e accettare la domanda "Vuoi aggiungere questo host conosciuti".

+1

'-x" -o UserKnownHostsFile =/dev/null -o StrictHostKeyChecking = no "' ha funzionato anche per me – zpon

2

ero sconcertato da questo. Una volta mi sono superato il problema 255 ... ho finito con un codice di errore misterioso 1. Questo è il foo di ottenere che si sono risolti:

pssh -x '-tt' -h HOSTFILELIST -P "sudo yum -y install glibc" 

-P significa scrivere l'output come si va ed è opzionale. Ma la -x '-tt' trucco è quello che costringe un tty pseudo da assegnare.

È possibile ottenere un indizio che cosa il codice di errore 1 significa che questo se si cerca:

ssh AHOST "sudo yum -y install glibc" 

Si può vedere:

[[email protected] ~]$ ssh MYHOST "sudo yum -y install glibc" 
sudo: sorry, you must have a tty to run sudo 
[[email protected] ~]$ echo $? 
1 

Avviso il codice di ritorno di questo è 1, che è ciò che pssh ti sta segnalando.

Ho trovato questo trucco -x -tt here. Si noti inoltre che l'attivazione della modalità dettagliata (pssh -verbose) per questi casi non aiuta in alcun modo.

Problemi correlati