同じバージョンのRedHat 6.4を実行している2つのサーバーがありますが、sudo
SSHを介してサーバーの1つからリモートコマンドを実行すると、そのうちの1つは動作が異なります。 server1では、一定時間が経過すると自動的に接続が終了します。成功 sudo
コマンドを実行しましたが、server3では接続は開いたままです。
これらのテストでは、sudo
ユーザーにNOPASSWDフラグがあるため、プロンプトは表示されません。私が知る限り、このサーバーのすべての設定は同じです(コピーです)。
私はこれをテストしました:
ssh -vvv user@server1 << EOF
sudo ls -l /home/
ls -l /home/
pwd
EOF
server1で実行すると、ファイルのリストが表示されます。
debug3: Wrote 32 bytes for a total of 1621
total 40
drwxr-xr-x. 5 user user 4096 Apr 26 2013 user
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
sudo
コマンドを使用せずに同じサーバーで実行すると、ファイルのリストと結果の両方がpwd
表示されます。
ssh -vvv user@server1 << EOF
ls -l /home/
ls -l /home/
pwd
EOF
結果:
debug3: Wrote 32 bytes for a total of 1605
total 40
drwxr-xr-x. 5 user user 4096 Apr 26 2013 user
total 40
drwxr-xr-x. 5 user user 4096 Apr 26 2013 user
/home/user
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
しかし、スクリプトを実行するとそしてコマンドsudo
に従ってサーバー3以前のテストと同様に、3つのコマンドすべての結果が得られました。両方のサーバー(1と3)のログ出力を比較しましたが、ssh -vvv
接続が閉じられたときにデバッグ行の順序が異なることを除いて、client_input...
すべてが同じようです(行を参照)。
server1(yesまたはnoと同じsudo
)
[command results]
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug2: channel 0: rcvd close
サーバー3
[command results]
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd close
sudo
コマンドが含まれているときにスクリプトが完全に実行されるように接続が自動的に閉じられないようにserver1を変更する方法を知りたいです。
私が確認したいくつかのオプションは次のとおりです。
- SE Linuxが無効になっています。
- ファイルがシェルを使用して
passwd
正しく構成されています。/bin/bash
- errexitが閉じました(とにかくコマンドは成功しました)。
sudoers
構成はsshd_config
両方のサーバーで同じです。
サーバー間で私が見ることができる唯一の違いは、障害のあるサーバー1が前世代のサーバーであるProLiant DL380であることです。G7比較するG8サーバー3の場合。私が試して実行している他のサーバーもG8です(試してみるサーバーはG7のみです)。ハードウェアがどのようにそのような問題を引き起こすのか理解していません。