2013-02-14 59 views
17

मेरे कोड में मेरे पास रिमोट स्क्रिप्ट चलाने के लिए निम्न है।एसएसएच स्क्रिप्ट 255 त्रुटि

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

किसी कारण से यह 255 'मुझ पर रहता है। कोई विचार?

मैं बॉक्स ठीक (passless कुंजी सेटअप)

REMOTE स्क्रिप्ट में 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

किसी कारण से आपकी * रिमोट * स्क्रिप्ट 255 लौटाती है, और एसएसएच सिर्फ आपके परिणाम को वितरित करता है। हमें स्क्रिप्ट दिखाने के बारे में कैसे? –

+0

ने स्क्रिप्ट –

+1

को एक चेतावनी के रूप में पोस्ट किया है, कतार के सामने अपने प्रश्न को बंपिंग रखने के लिए कचरा संपादन का उपयोग न करें। यदि आप इसे फिर से करते हैं, तो मैं इस सवाल को लॉक कर दूंगा। –

उत्तर

4

इस तरह से एक पासवर्ड पढ़ने में सक्षम नहीं होने के रूप में प्रमाणीकरण या कनेक्शन के साथ एक समस्या है, टर्मिनल, एसएसएच आपकी वास्तविक स्क्रिप्ट चलाने में सक्षम होने के बिना 255 के साथ बाहर निकल जाएगा। यह सुनिश्चित करने के लिए सत्यापित करें कि एसएसएच कनेक्शन सफलतापूर्वक स्थापित किया गया है या नहीं, इसके बजाय आप 'सत्य' चला सकते हैं।

15

आमतौर पर ऐसा होता है जब रिमोट डाउन/अनुपलब्ध होता है; या रिमोट मशीन में एसएसएच स्थापित नहीं है; या फ़ायरवॉल दूरस्थ होस्ट को कनेक्शन स्थापित करने की अनुमति नहीं देता है।

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 मशीन कर सकते हैं?

  • क्या रिमोट एसएसएच स्थापित है?

  • यदि स्थापित है, तो एसएसएच सेवा चल रही है?

+0

एसएसएचइंग काम करता है ठीक है। –

+0

फिर यह रिमोट होस्ट पर चलने वाली स्क्रिप्ट है जो 255 लौटाती है। –

+1

यह पहचानना मुश्किल है कि क्यों * आपकी स्क्रिप्ट 255 लौटाती है। अधिकतर यह फ़ंक्शन 'backup_mysql_rsnapshot' है जिसमें असफल भाग होता है क्योंकि अन्य दो फ़ंक्शंस 999 में वापस आते हैं विफलता की आप उस मशीन पर एसएसएच कर सकते हैं और स्क्रिप्ट का परीक्षण कर सकते हैं? आप इसे डीबग करने के लिए अपनी स्क्रिप्ट में 'set -e' का उपयोग कर सकते हैं। –

9

यह त्रुटि तब भी होगी जब मेजबानों को पीडीएस का उपयोग करते समय जो आपके "ज्ञात_होस्ट्स" फ़ाइल में शामिल नहीं हैं।

मैं मैन्युअल रूप से प्रत्येक होस्ट में एसएसएच द्वारा इसे सही करने और प्रश्न को स्वीकार करने में सक्षम था "क्या आप इसे ज्ञात होस्ट में जोड़ना चाहते हैं"।

+1

'-x" -o UserKnownHostsFile =/dev/null -o StrictHostKeyChecking = no "' मेरे लिए भी काम किया – zpon

2

मैं इससे फंस गया था। एक बार मैं 255 समस्या से पारित कर दिया गया है ... मैं एक रहस्यमय त्रुटि कोड 1. साथ समाप्त हो गया यह foo पाने के लिए है कि हल हो गई है:

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

-पी उत्पादन को लिखने के रूप में तुम जाओ का अर्थ है और वैकल्पिक है। लेकिन -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 -tt चाल here मिला। यह भी ध्यान रखें कि इन मामलों के लिए वर्बोज़ मोड (pssh --verbose) को चालू करने से आपकी मदद करने के लिए कुछ भी नहीं है।