2013-02-14 357 views
17

在我的代碼中,我有以下運行遠程腳本。ssh腳本返回255錯誤

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

由於某種原因,它保持255'在我身上。有任何想法嗎?

我可以SSH到盒子就好(passless鍵設置)

遠程腳本:

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只是將結果傳遞給您。給我們看劇本怎麼樣? – 2013-02-14 23:15:29

+0

發佈了腳本 – 2013-02-14 23:33:18

+1

作爲警告,不要使用垃圾編輯來將問題暴露在隊列的前端。如果你再次這樣做,我會鎖定這個問題。 – 2013-02-20 02:22:33

回答

4

如果有與身份驗證或連接有問題,如不能夠讀取密碼終端,ssh將以255退出而不能運行你的實際腳本。請驗證確保您可以運行'true'來查看ssh連接是否已成功建立。

15

這通常發生在遠程關閉/不可用時;或者遠程機器沒有安裝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 

Check-list:

  • 如果直接從命令行運行ssh命令,會發生什麼情況?

  • 你能夠ping那臺機器嗎?

  • 遠端是否安裝了ssh?

  • 如果安裝了,那麼ssh服務是否正在運行?

+0

SSH'ing工作正常。 – 2013-02-14 23:31:09

+0

然後它就是在返回255的遠程主機上運行的腳本。 – 2013-02-14 23:31:54

+1

很難確定*爲什麼*您的腳本返回255.最有可能的是函數'backup_mysql_rsnapshot'具有失敗的部分,因爲其他兩個函數返回999的失敗。你可以SSH到那臺機器並測試腳本?你可以在腳本中使用'set -e'來調試它。 – 2013-02-14 23:41:36

9

將pdsh用於未包含在「known_hosts」文件中的主機時,也會發生此錯誤。

我能夠通過SSH手動進入每臺主機並接受「您是否想將其添加到已知主機」這個問題來解決此問題。

+1

'-x「-o UserKnownHostsFile =/dev/null -o StrictHostKeyChecking = no」'也適用於我 – zpon 2016-11-02 06:55:11

2

我被這個難住了。一旦我通過了255問題...我結束了一個神祕的錯誤代碼1.這是foo來獲取解決:

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

-P意味着,當您去寫輸出出來,是可選的。但是技巧是強制分配一個虛擬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 -tt技巧here。另請注意,爲這些情況啓用詳細模式(pssh --verbose)對您無能爲力。