web-dev-qa-db-ja.com

sshスクリプトが255エラーを返します

私のコードでは、リモートスクリプトを実行するために次のものがあります。

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

何らかの理由で、それは私に255 'を保持します。何か案は?

ボックスにSSHでうまく接続できます(パスレスキーのセットアップ)

リモートスクリプト:

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

これは通常、リモートがダウン/使用不可のときに発生します。または、リモートマシンにsshがインストールされていません。または、ファイアウォールがリモートホストへの接続の確立を許可していません。

sshは、エラーが発生した場合、またはリモートスクリプトから255が返された場合に255を返します。

 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サービスは実行されていますか?

30
P.P.

このエラーは、「known_hosts」ファイルに含まれていないホストにpdshを使用する場合にも発生します。

各ホストに手動でSSHで接続し、「これを既知のホストに追加しますか?」という質問を受け入れることで、これを修正できました。

13
Wes Floyd

端末からパスワードを読み取れないなど、認証または接続に問題がある場合、sshは実際のスクリプトを実行できずに255で終了します。代わりに 'true'を実行できることを確認して、ssh接続が正常に確立されているかどうかを確認してください。

4
that other guy

私はこれに困惑しました。 255の問題に合格すると、謎のエラーコード1になりました。これが解決するfooです。

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

-Pは、出力を書き出すことを意味し、オプションです。しかし、-x '-tt'トリックは、疑似ttyを強制的に割り当てるものです。

あなたがしようとすると、エラーコード1がこれを意味するものの手がかりを得ることができます:

ssh AHOST "Sudo yum -y install glibc"

あなたは見るかもしれません:

[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

この戻りコードは1であり、psshが報告していることに注意してください。

この-x -ttトリック here を見つけました。また、これらの場合に冗長モード(pssh --verbose)をオンにしても何の助けにもならないことに注意してください。

@ wes-floydと@zponが書いたように、これらのパラメーターをSSHに追加して、「接続を続行しますか(yes/no)?」をバイパスします。

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