2013-02-14 80 views
17

私のコードでは、リモートスクリプトを実行するために以下のコードを用意しました。sshスクリプトが255エラーを返す

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

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

私は箱だけで罰金(passlessキーの設定)

REMOTE SCRIPTに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 "[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

何らかの理由で、あなたの* remote *スクリプトが255を返し、sshがその結果をあなたに届けるだけです。スクリプトを見せてどうですか? –

+0

がスクリプトを投稿しました –

+1

警告として、ガベージエディットを使用して質問をキューの前面に押し付けないようにしてください。これをやり直すと、私はこの質問をロックします。 –

答えて

4

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

15

これは、通常、リモートがダウン/使用できない場合に発生します。またはリモートマシンにsshがインストールされていない。またはファイアウォールでリモートホストとの接続が確立されない。エラーが発生した255または255は、リモートスクリプトによって返され

sshリターン:

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

+0

SSHで動作しています。 –

+0

それは255を返すリモートホスト上で実行するスクリプトです。 –

+1

なぜあなたのスクリプトが255を返すのかを特定するのは難しいです。他の2つの関数が999を返すので失敗する部分を持つ関数である可能性が最も高いです失敗のあなたはそのマシンにsshしてスクリプトをテストできますか?スクリプトで 'set -e'を使ってデバッグすることができます。 –

9

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

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

+1

'-x" -o UserKnownHostsFile =/dev/null -o StrictHostKeyChecking = no "'私のために働いた – zpon

2

これで私は困惑しました。

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

-Pは、あなたが行くように出力を書き出す意味し、オプションである:私は255の問題に合格してしまった後は...私は、これは、それが解決し得るためにfooのある神秘的なエラーコード1になってしまいました。しかし、-x '-tt'トリックは、擬似的なttyの割り当てを強制します。

ssh AHOST "sudo yum -y install glibc" 

あなたが表示されることがあります:何を、このためのリターンコードが1である

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

お知らせ、であるあなたがしようとしている場合は、エラーコード1本を何を意味するのか手がかりを得ることができます

psshがあなたに報告しています。

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

関連する問題