私のコードでは、リモートスクリプトを実行するために次のものがあります。
ssh [email protected] "sh /home/user/backup_mysql.sh"
何らかの理由で、それは私に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
これは通常、リモートがダウン/使用不可のときに発生します。または、リモートマシンに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サービスは実行されていますか?
このエラーは、「known_hosts」ファイルに含まれていないホストにpdshを使用する場合にも発生します。
各ホストに手動でSSHで接続し、「これを既知のホストに追加しますか?」という質問を受け入れることで、これを修正できました。
端末からパスワードを読み取れないなど、認証または接続に問題がある場合、sshは実際のスクリプトを実行できずに255で終了します。代わりに 'true'を実行できることを確認して、ssh接続が正常に確立されているかどうかを確認してください。
私はこれに困惑しました。 255の問題に合格すると、謎のエラーコード1になりました。これが解決するfooです。
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)をオンにしても何の助けにもならないことに注意してください。
@ wes-floydと@zponが書いたように、これらのパラメーターをSSHに追加して、「接続を続行しますか(yes/no)?」をバイパスします。
-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no