为什么我的rpm安装在远程播放时挂起

时间:2013-07-17 13:33:50

标签: bash ssh rpm aix

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

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

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

此卸载正在运行。

我有一个脚本推动这个安装:

Uninstall.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

1 个答案:

答案 0 :(得分: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用户(如果是目标),则不需要密码   user与调用用户相同,或者策略已禁用   用户或命令的身份验证。

也许它正在悬挂,因为它正在尝试进行身份验证,而本地则不需要这样做。