Linux shell脚本 - 如何切换用户并运行脚本?

3

我目前正在编写一个.sh脚本,用于在4台不同的机器上部署不同的应用程序。目前我遇到了运行其他用户的脚本问题。我需要使用我的凭据登录myUser,并通过sudo su切换到user2来运行特定的脚本。

通常情况下,我会手动执行以下操作:

ssh myUser@remotehost
[Type in password]
sudo su - user2
cd /path/only/accessible/to/user2
./someScript.sh

当我尝试执行以下命令时:

ssh -t myUser@$remotehost "sudo su - user2 && /path/only/accessible/to/user2 && ./someScript.sh"

系统会要求我输入密码,然后我会以user2的身份登录,但是脚本不会给我任何反馈信息,而通常情况下脚本都会给我一些信息。

我做错了什么?


  1. 不要在 sudo su - 或者 sudo 或者 su 中同时使用,只选择其中一个。
  2. ssh 中你忘记执行 cd 命令了,为什么不直接运行脚本(不需要 cd),例如:"sudo su - user2 && /path/only/accessible/to/user2/someScript.sh"
- sKwa
2个回答

2

尝试使用以下命令:

ssh -t myUser@$remotehost "sudo -u user2 /path/only/accessible/to/user2/someScript.sh"

如果需要在此之后访问shell,请使用以下命令:

ssh -t myUser@$remotehost "sudo -u user2 /path/only/accessible/to/user2/someScript.sh && /bin/bash -l"

为什么要用sudo su?难道你不觉得这有问题吗?这是一种不好的实践。 - sKwa
现在回答不使用 sudo su 的问题。 - uaBArt
本来应该可以工作,但是我没有以user2的身份在那台机器上执行的权限(这很奇怪),我只有切换用户的权限。我仍然会把你的答案标记为被接受的,感谢你让我学到了东西。我的其余问题将与系统管理员交涉。 - Anthony Garneau

0

如果有人对此感到疑惑,我来更新一下情况。

最终我采用了使用 SSH 密钥登录的方法。我的系统管理员必须参与其中才能完成设置,但至少这是一个可行的选项。

ssh -i /path/to/sshKey user2@$remoteHost "/path/only/accessible/to/user2/someScript.sh"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接