ssh脚本返回255错误

Ama*_*ith 41 linux ssh bash shell

在我的代码中,我有以下内容来运行远程脚本.

ssh root@host.domain.com "sh /home/user/backup_mysql.sh"
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它对我保持着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
Run Code Online (Sandbox Code Playgroud)

P.P*_*.P. 31

这通常发生在遥控器关闭/不可用时; 或远程机器没有安装ssh; 或者防火墙不允许建立与远程主机的连接.

ssh 发生错误时返回255或远程脚本返回255:

 EXIT STATUS

     ssh exits with the exit status of the remote command or
     with 255 if an error occurred.
Run Code Online (Sandbox Code Playgroud)

通常,您会收到类似于以下内容的错误消息:

ssh: connect to host host.domain.com port 22: No route to host
Run Code Online (Sandbox Code Playgroud)

要么

ssh: connect to host HOSTNAME port 22: Connection refused
Run Code Online (Sandbox Code Playgroud)

检查列表:

  • 如果直接从命令行运行ssh命令会发生什么?

  • 你能用ping那台机器吗?

  • 遥控器是否安装了ssh?

  • 如果已安装,那么ssh服务是否正在运行?

  • 例如,`${MYSQLDUMP} --single-transaction -u ${MUSER} -h ${MHOST} -p${MPASS} $db || 101号出口等 (2认同)

小智 13

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

我能够通过手动SSH连接到每个主机并接受问题"你想将它添加到已知主机"来纠正这个问题.

  • -x“ -o UserKnownHostsFile = / dev / null -o StrictHostKeyChecking = no”也对我有用 (3认同)

tha*_*guy 5

如果身份验证或连接出现问题,例如无法从终端读取密码,则ssh将以255退出,而无法运行您的实际脚本。验证以确保可以改为运行“ true”,以查看ssh连接是否成功建立。


小智 5

问题不是出在以下几行吗:

### Die on demand with message ###
die(){
  echo "$@"
  exit 999
}
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,但我相信退出 999 超出了退出代码的范围,并导致退出状态为 255。

  • 这是一个被低估的答案。 (3认同)