1

rpm をアンインストールしたい AIX 6.1 サーバーがあります。

このアンインストールは、サーバー上で直接実行できます。

[user@server]$ sudo /usr/bin/rpm -e --allmatches _MyRPM-1.0.0

このアンインストールは機能しています。

このアンスタレーションを起動するスクリプトがあります:

アンインストール.sh

#!/usr/bin/bash
set -x

sudo /usr/bin/rpm -e --allmatches _MyRPM-1.0.0

サーバー上でこのスクリプトを問題なく再生できます。

[user@server]$ cd /where/is/the/script;./Uninstall.sh
+ sudo /usr/bin/rpm -e --allmatches _MyRPM-1.0.0
_MyRPM-1.0.0 has been uninstalled successfully

しかし、このスクリプトをリモートで再生すると、rpm がハングします。

[user@client]$ ssh user@server "cd /where/is/the/script;./Uninstall.sh"
+ sudo /usr/bin/rpm -e --allmatches _MyRPM-1.0.0

そして、このコマンドがハングします。ssh を終了するには、このコマンドを強制終了する必要があります。

PS :インストールまたはアンインストールについては、まったく同じことが言えます。

編集: 問題はsudoから来ているようです。ハングの問題は、sudo で何かをしているときにも発生します。

たとえば、新しいスクリプト: test.sh

#!/usr/bin/bash
set -x

sudo env
4

1 に答える 1

0

Sudo は通常、ユーザーが自分自身として認証する必要があります。思い出すと、ターミナルの処理方法により、リモート実行を介して異なる動作をする可能性があります。

現時点ではこれをテストするシステムはありませんが、ssh の -t または -T スイッチを試すことができます。

 -T      Disable pseudo-tty allocation.

 -t      Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.
         Multiple -t options force tty allocation, even if ssh has no local tty.

リモートで実行しているスクリプトを /etc/sudoers に追加することで、これを機能させることができると思います。

{user} ALL=NOPASSWD:/where/is/the/script/Uninstall.sh

次に試してください:

"ssh -t user@server /where/is/the/script/Uninstall.sh"

編集:

リモートで実行したときに sudo の動作が異なる理由を説明するのに役立つ詳細がいくつか見つかりました。

http://www.sudo.ws/sudoers.man.html

sudoers セキュリティ ポリシーでは、ほとんどのユーザーが sudo を使用する前に自分自身を認証する必要があります。呼び出し元のユーザーが root である場合、ターゲット ユーザーが呼び出し元のユーザーと同じ場合、またはポリシーによってユーザーまたはコマンドの認証が無効になっている場合、パスワードは必要ありません。

認証しようとしているためにハングしている可能性がありますが、ローカルでは認証する必要はありません。

于 2013-07-17T18:25:01.523 に答える