Ssh script возвращает ошибку 255

В моем коде у меня есть следующее, чтобы запустить удаленный script.

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

По какой-то причине он держится на мне. Любые идеи?

Я могу использовать SSH в коробке очень хорошо (настройка беспроблемных клавиш)

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

Ответы

Ответ 1

Это обычно происходит, когда пульт недоступен/недоступен; или на удаленном компьютере не установлено ssh; или брандмауэр не позволяет установить соединение с удаленным хостом.

ssh возвращает 255 при возникновении ошибки или возвращается 255 удаленным script:

 EXIT STATUS

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

Обычно у вас есть сообщение об ошибке, похожее на:

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

или

ssh: connect to host HOSTNAME port 22: Connection refused

Контрольный список:

  • Что произойдет, если вы запустите команду ssh непосредственно из командной строки?

  • Можете ли вы ping эту машину?

  • Установлен ли пульт ssh?

  • Если установлено, то работает ли служба ssh?

Ответ 2

Эта ошибка также возникает при использовании pdsh для хостов, которые не содержатся в файле "known_hosts".

Я смог исправить это SSH'ing на каждом хосте вручную и принять вопрос "Хотите добавить это к известным хостам".

Ответ 3

Если возникает проблема с аутентификацией или подключением, например, невозможность чтения пароля с терминала, ssh завершит работу с 255 без возможности запуска вашего фактического script. Убедитесь, что вы можете запустить 'true' вместо этого, чтобы проверить, успешно ли установлено соединение ssh.

Ответ 4

Я был в шоке от этого. Как только я получил проблему 255... Я закончил с таинственным кодом ошибки 1. Это foo, чтобы решить эту проблему:

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

-P означает запись вывода по ходу и необязательна. Но трюк -x '-tt' - это то, что заставляет выделять psuedo tty.

Вы можете понять, что означает код ошибки 1, если вы попытаетесь:

ssh AHOST "sudo yum -y install glibc"

Вы можете видеть:

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

Обратите внимание, что код возврата для этого - 1, что и сообщает pssh.

Я нашел здесь -x-трюк здесь. Также обратите внимание, что включение подробного режима (pssh --verbose) для этих случаев не помогает вам.

Ответ 5

Как написали @wes-floyd и @zpon, добавьте эти параметры в SSH, чтобы обойти "Вы уверены, что хотите продолжить подключение (да/нет)?"

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

Ответ 7

SSH Очень критическая проблема на производстве. SSH-debug1: выход из состояния 255

Я работал с Live Server, и многие вещи застряли. Я пытаюсь исправить многие вещи, но точная проблема 255 не выясняется.

Даже я решил проблему 100%

Заменить мой файл sshd_config на аналогичный другой мой сервер Debian

[email protected]: ~ # cp sshd_config sshd_config.snippetbucket.com.bkp # сохранить мой файл резервной копии

[email protected]: ~ # echo ""> sshd_config

[email protected]: ~ # nano sshd_config # заменяет весь контент другим точно таким же сервером

[email protected]: ~ # служба sudo ssh restart # нормально перезапустить сервер

Эти 100% решают мою проблему немедленно.

# SnippetBucket-Tip: Всегда делайте резервную копию файлов, связанных с ssh, что помогает при быстром восстановлении.

Примечание: после применения данных изменений вам необходимо выйти из режима восстановления и перезагрузить ваш vps/выделенный сервер в обычном режиме, чем работает ваше ssh-соединение.

В режиме восстановления ssh не позволяет пользователю входить в систему как обычно. работает только спасение связанных с ssh логин и пароль.