it-swarm.com.de

ssh-Skript gibt 255 Fehler zurück

In meinem Code habe ich Folgendes, um ein Remote-Skript auszuführen.

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

Aus irgendeinem Grund bleibt es bei mir. Irgendwelche Ideen?

Ich kann SSH in die Box ganz gut (Passless Keys Setup)

FERNBEDIENUNG:

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
39
Amanada Smith

Dies ist normalerweise der Fall, wenn die Fernbedienung nicht verfügbar ist. oder auf der entfernten Maschine ist ssh nicht installiert; oder eine Firewall lässt nicht zu, dass eine Verbindung zum Remote-Host hergestellt wird.

ssh gibt 255 zurück, wenn ein Fehler aufgetreten ist oder 255 vom Remote-Skript zurückgegeben wird:

 EXIT STATUS

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

Normalerweise würden Sie eine Fehlermeldung ähnlich der folgenden erhalten:

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

Oder

ssh: connect to Host HOSTNAME port 22: Connection refused

Checkliste:

  • Was passiert, wenn Sie den Befehl ssh direkt über die Befehlszeile ausführen?

  • Können Sie diese Maschine ping?

  • Hat die Fernbedienung ssh installiert?

  • Wenn installiert, läuft dann der SSH-Dienst?

30
P.P.

Dieser Fehler tritt auch auf, wenn Sie pdsh für Hosts verwenden, die nicht in Ihrer Datei "known_hosts" enthalten sind.

Ich konnte dies korrigieren, indem ich manuell SSH'ing in jeden Host ausführte und die Frage "Möchten Sie dies zu bekannten Hosts hinzufügen" akzeptierte.

13
Wes Floyd

Wenn bei der Authentifizierung oder Verbindung ein Problem auftritt, z. B. wenn kein Kennwort vom Terminal gelesen werden kann, wird ssh mit 255 beendet, ohne dass das eigentliche Skript ausgeführt werden kann. Vergewissern Sie sich, dass Sie stattdessen 'true' ausführen können, um festzustellen, ob die ssh-Verbindung erfolgreich hergestellt wurde.

4
that other guy

Das hat mich verblüfft. Nachdem ich das 255-Problem gelöst hatte, wurde mir ein mysteriöser Fehlercode 1 angezeigt.

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

-P bedeutet, dass Sie die Ausgabe nach Belieben ausgeben. Dies ist optional. Der Trick - x '-tt' erzwingt jedoch die Zuweisung einer Pseudo-Tty.

Sie können einen Hinweis darauf erhalten, was der Fehlercode 1 bedeutet, wenn Sie Folgendes versuchen:

ssh AHOST "Sudo yum -y install glibc"

Sie können sehen:

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

Beachten Sie, dass der Rückgabecode hierfür 1 ist, was pssh Ihnen mitteilt.

Ich habe diesen -x -tt-Trick gefunden hier . Beachten Sie auch, dass das Aktivieren des ausführlichen Modus (pssh --verbose) für diese Fälle nichts hilft.

Fügen Sie, wie @ wes-floyd und @zpon geschrieben haben, diese Parameter zu SSH hinzu, um "Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (Ja/Nein)?"

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