如何切换用户脚本运行另一个脚本
问题描述:
我有一个脚本,将作为根执行,部分方式通过脚本我想切换到用户(说,鲍勃),并执行另一个脚本使用该用户的环境。在脚本结尾处,我想切换回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:
答
你可能寻找其中之一:
模拟-u
用户bob的-i
初始环境:
sudo -i -u bob [command]
或者,使用sudo
,以获得所需的权限使用su
,并要求它-
启动登录shell鲍勃(不裸-
你不这样做),并-c
运行命令:
sudo su - bob -c [command]
+0
谢谢Michael的建议。我尝试过--login,但是尽管有文档广告,但它没有给我提供环境。我已经编辑了我上面的原始帖子供您审核。 – Mercutio
一种方法是运行本地SSH服务器。你可以像bob一样调用命令:'ssh bob @ localhost - command'。如果将bob的公钥放入'$ HOME/.ssh/authorized_keys'中,密码提示将被跳过。它是一个Linux环境吗? –