我有一个脚本,可以打开终端窗口并向它们发送命令。其中一些必须以 root 身份运行,因此我会向它们发送此命令
sudo sh -c 'do_stuff && bash'
这将运行一些初始命令,然后进入交互式 shell。
在我的环境中,终端程序本身不能由 root 用户启动(是的,真的),并且将 root 密码存储在文件中(是的,真的)并启动几个这样的终端而不每次都要求输入密码实际上是有意义的。
这种情况很愚蠢,但请接受它。请不要告诉我我做错了,在这种环境下我别无选择。
如果我向他们发送这个命令
sudo sh -S -c 'do_stuff && bash' <passwordfile
然后终端不是进入交互式 shell,sudo
然后立即退出do_stuff
。
我如何从 进入交互式 shell sudo -S
?
答案1
你做错了。但你做有另一种选择。
首先,将密码存储在文件中是完全愚蠢的,并且会带来严重的安全问题。相反,应配置sudoers
为允许在不使用密码的情况下执行必要的操作。
其次,不要尝试同时运行非交互式命令和交互式 shell。这样不行。您必须分别运行它们,但您可以这样运行它们:要让 sudo 启动交互式 shell,只需运行sudo -i
。