ssh脚本返回255错误

时间:2013-02-14 23:09:35

标签: linux bash shell ssh

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

ssh root@host.domain.com "sh /home/user/backup_mysql.sh"

由于某种原因,它对我保持着255。有什么想法吗?

我可以通过SSH进入盒子(无法设置密钥)

REMOTE SCRIPT:

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

8 个答案:

答案 0 :(得分:29)

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

检查列表:

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

  • 你能ping那台机器吗?

  • 遥控器是否安装了ssh?

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

我被这个难过了。一旦我通过了255问题......我最终得到了一个神秘的错误代码1.这是解决问题的方法:

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

-P表示在出发时写出输出并且是可选的。但 -x' -tt' 技巧是强制分配伪tty的原因。

如果您尝试:

,您可以了解错误代码1的含义
ssh AHOST "sudo yum -y install glibc"

你可能会看到:

[slc@bastion-ci ~]$ ssh MYHOST "sudo yum -y install glibc"
sudo: sorry, you must have a tty to run sudo
[slc@bastion-ci ~]$ echo $?
1

请注意,此处的返回代码为1,这是pssh向您报告的内容。

我发现了这个-x -tt技巧here。另请注意,为这些情况打开详细模式(pssh --verbose)无助于您。

答案 4 :(得分:0)

SSH生产中非常关键的问题。 SSH-debug1:退出状态255

我正在使用Live Server,并且卡住了很多东西。我尝试修复许多问题,但确切的问题255仍未弄清。

即使我已解决问题100%

  

从其他我的debian服务器上替换我的sshd_config文件

     

root@snippetbucket.com:〜#cp sshd_config sshd_config.snippetbucket.com.bkp#保留我的备份文件

     

root@snippetbucket.com:〜#echo“”> sshd_config

     

root@snippetbucket.com:〜#nano sshd_config#将所有内容替换为其他内容   完全相同的服务器

     

root@snippetbucket.com:〜#sudo服务ssh restart#正常重启服务器

那100%可以立即解决我的问题。

  

#SnippetBucket-Tip:始终备份与ssh相关的文件,这有助于快速恢复。

注意:应用了给定的更改后,您需要退出救援模式并正常重启vps /专用服务器,然后ssh连接才能正常工作。

在救援模式下,ssh不允许用户正常登录。只能使用与ssh相关的登录名和密码。

答案 5 :(得分:0)

正如@ wes-floyd和@zpon所写,将这些参数添加到SSH以绕过“您确定要继续连接(是/否)吗?”

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

答案 6 :(得分:0)

如果上述方法无济于事:检查语言环境在客户端和服务器上是否有效:
https://www.linuxbabe.com/linux-server/fix-ssh-locale-environment-variable-error
How do not pass locale through ssh

答案 7 :(得分:0)

这可能是ssh-agent问题。 检查当前是否有eval "$(ssh-agent -s)"

运行的ssh-agent PID

检查是否用ssh-add -l添加了您的身份,如果没有,请用ssh-add <pathToYourRSAKey>添加了您的身份。

然后再试一次返回255的ssh命令(或其他产生ssh守护程序的命令,例如 autossh )。