Linux

執行切換到使用者的遠端 shell 腳本不會返回到發出本地伺服器的 shell

  • January 23, 2014

當我執行這樣的腳本時:

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 不同的使用者,只是列出的?

使用 sudo 執行 rpm 命令:

#!/bin/sh
mkdir -p /data/workday/cred
chown -R myuser:myuser /data
sudo -u myuser rpm -Uvp --force --nodeps --prefix /data/place /data/RPMs/myrpm.rpm

su啟動一個外殼。當您退出該 shell 時,將執行 rpm 命令。如果您要更改使用者以執行 rpm 命令,則

su -c 'rpm -Uvp --force --nodeps --prefix /data/place /data/RPMs/myrpm.rpm'  myuser

引用自:https://serverfault.com/questions/569408