web-dev-qa-db-fra.com

Le script ssh renvoie une erreur 255

Dans mon code, j'ai les éléments suivants pour exécuter un script distant.

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

Pour une raison quelconque, il continue à faire des vagues sur moi. Des idées?

Je peux SSH dans la boîte très bien (configuration des clés sans fil)

SCRIPT À DISTANCE:

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 "$@"
        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
39
Amanada Smith

Cela se produit généralement lorsque la télécommande est en panne/indisponible; ou ssh n'est pas installé sur la machine distante; ou un pare-feu ne permet pas d'établir une connexion avec l'hôte distant.

ssh renvoie 255 en cas d'erreur ou 255 par le script distant:

 EXIT STATUS

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

Habituellement, un message d'erreur semblable à:

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

Ou

ssh: connect to Host HOSTNAME port 22: Connection refused

liste de contrôle:

  • Que se passe-t-il si vous exécutez la commande ssh directement à partir de la ligne de commande?

  • Êtes-vous capable de ping cette machine?

  • Est-ce que ssh est installé sur la télécommande?

  • S'il est installé, le service ssh est-il en cours d'exécution?

30
P.P.

Cette erreur se produira également lors de l'utilisation de pdsh sur des hôtes ne figurant pas dans votre fichier "known_hosts".

J'ai pu corriger cela en insérant manuellement SSH dans chaque hôte et en acceptant la question "Voulez-vous ajouter cela à des hôtes connus".

13
Wes Floyd

En cas de problème d'authentification ou de connexion, par exemple l'impossibilité de lire un mot de passe à partir du terminal, ssh se fermera avec 255 sans pouvoir exécuter votre script. Vérifiez que vous pouvez exécuter "true" à la place, pour voir si la connexion SSH est établie avec succès.

4
that other guy

Cela m'a laissé perplexe. Une fois que je suis passé le problème 255 ... Je me suis retrouvé avec un mystérieux code d'erreur 1. C'est le foo pour résoudre ce problème:

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

-P signifie que vous écrivez la sortie au fur et à mesure et est facultatif. Mais le truc - x '-tt' est ce qui oblige un tshirt à être attribué.

Vous pouvez avoir une idée de la signification du code d'erreur 1 si vous essayez:

ssh AHOST "Sudo yum -y install glibc"

Vous pouvez voir:

[slc@bastion-ci ~]$ ssh MYHOST "Sudo yum -y install glibc"
Sudo: sorry, you must have a tty to run Sudo
[slc@bastion-ci ~]$ echo $?
1

Notez que le code de retour correspondant est 1, ce que pssh vous rapporte.

J'ai trouvé cette astuce -x -tt ici . Notez également que l'activation du mode verbose (pssh --verbose) pour ces cas ne vous aide pas.

Comme @ wes-floyd et @zpon ont écrit, ajoutez ces paramètres à SSH pour contourner "Êtes-vous sûr de vouloir continuer à vous connecter (oui/non)?"

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
0
vahid-dan