当我运行这样的脚本时:
ssh -t root@10.10.10.10 '/tmp/somescript.sh'
其中脚本定义为:
#!/bin/sh
mkdir -p /data/workday/cred
chown -R myuser:myuser /data
su myuser - # <------- NOTICE THIS ! ! ! !
rpm -Uvp --force --nodeps --prefix /data/place /data/RPMs/myrpm.rpm
请注意上面的 su 命令。
如果我注释掉 su 命令,脚本会远程运行,然后我的shell提示符返回到我来自的地方(我在上面运行ssh命令的同一服务器)
但是保留上面列出的脚本会导致脚本成功完成,但 shell提示符会保留在远程服务器上。
我该怎样防止这种情况?确保rpm命令的颁发者与root用户不同,只是列出了?
答案 0 :(得分:3)
但是保留上面列出的脚本会导致脚本成功完成,但shell提示符会保留在远程服务器上。
不完全是。该脚本运行到su
命令,该命令生成一个新的子shell,并在此处停止,直到退出shell。在退出该shell之前,rpm
命令永远不会运行,当它运行时,它将以root身份运行。
如果您想以非root用户身份运行rpm
命令,则需要执行一些不同的操作,例如:
sudo -u myuser rpm -Uvp ...
答案 1 :(得分:-1)
在脚本末尾添加“退出”