在我的代码中,我有以下内容来运行远程脚本。
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
答案 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)
我正在使用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-add -l
添加了您的身份,如果没有,请用ssh-add <pathToYourRSAKey>
添加了您的身份。
然后再试一次返回255的ssh命令(或其他产生ssh守护程序的命令,例如 autossh )。