我有一个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
答案 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与调用用户相同,或者策略已禁用 用户或命令的身份验证。
也许它正在悬挂,因为它正在尝试进行身份验证,而本地则不需要这样做。