2017-08-29 124 views
0

我有一个脚本,将作为根执行,部分方式通过脚本我想切换到用户(说,鲍勃),并执行另一个脚本使用该用户的环境。在脚本结尾处,我想切换回root并执行更多命令。我想运行这个脚本,而不必输入鲍勃的密码。如何切换用户脚本运行另一个脚本

此脚本将在首次启动时通过用户数据功能提供给我的AWS EC2实例。

我认为这样做的方法是使用sudo或su。但是,我似乎无法使用这两种方法访问bob的环境。

在下面的标准输出回波,你会看到环境变量MYVAR被初始化为Inara但是当这个脚本使用sudo执行,该值未设置....

[email protected]:~/workspaces/sandbox$ su --login bob 
Password: 
[email protected]:~$ cat bin/echo.sh 
#!/bin/bash 

echo "In echo.sh.. myvar is {$myvar}" 

echo "Now executing the ruby script" 
. ~/.bashrc 
~/bin/echo.rb 
[email protected]:~$ cat bin/echo.rb 
#!/usr/bin/env ruby 
puts "$myvar is: #{ENV['myvar']}" 

[email protected]:~$ bin/echo.sh 
In echo.sh.. myvar is {Inara} 
Now executing the ruby script 
$myvar is: Inara 
[email protected]:~$ exit 
logout 

[email protected]:~/workspaces/sandbox$ cat test.sh 
#!/bin/bash 
stty echo 
sudo --login -u bob bin/echo.sh 

[email protected]:~/workspaces/sandbox$ ./test.sh 
In echo.sh.. myvar is {} 
Now executing the ruby script 
$myvar is: 
+0

一种方法是运行本地SSH服务器。你可以像bob一样调用命令:'ssh bob @ localhost - command'。如果将bob的公钥放入'$ HOME/.ssh/authorized_keys'中,密码提示将被跳过。它是一个Linux环境吗? –

回答

0

你可能寻找其中之一:

模拟-u用户bob的-i初始环境:

sudo -i -u bob [command] 

或者,使用sudo,以获得所需的权限使用su,并要求它-启动登录shell鲍勃(不裸-你不这样做),并-c运行命令:

sudo su - bob -c [command] 
+0

谢谢Michael的建议。我尝试过--login,但是尽管有文档广告,但它没有给我提供环境。我已经编辑了我上面的原始帖子供您审核。 – Mercutio

相关问题