ssh脚本返回255错误

问题描述:

在我的代码中,我有以下运行远程脚本。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

如果有与身份验证或连接有问题,如不能够读取密码终端,ssh将以255退出而不能运行你的实际脚本。请验证确保您可以运行'true'来查看ssh连接是否已成功建立。

这通常发生在远程关闭/不可用时;或者远程机器没有安装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

将pdsh用于未包含在“known_hosts”文件中的主机时,也会发生此错误。

我能够通过SSH手动进入每台主机并接受“您是否想将其添加到已知主机”这个问题来解决此问题。

+1

'-x“-o UserKnownHostsFile =/dev/null -o StrictHostKeyChecking = no”'也适用于我 – zpon 2016-11-02 06:55:11

我被这个难住了。一旦我通过了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)对您无能为力。