sudo コマンドの後、SSH 接続は自動的に閉じます。

sudo コマンドの後、SSH 接続は自動的に閉じます。

同じバージョンのRedHat 6.4を実行している2つのサーバーがありますが、sudoSSHを介してサーバーの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のみです)。ハードウェアがどのようにそのような問題を引き起こすのか理解していません。

関連情報