1

我有一个 AIX 6.1 服务器,我想在其中卸载 rpm。

此卸载可以直接在服务器上完成:

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

此卸载正在运行。

我有一个启动这个 unstallation 的脚本:

卸载.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 进行 anithing 时,也会出现挂起问题。

例如使用新脚本: 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 回答