2015-05-28 23 views
1

我正在编写一个Rails应用程序,它由用户A运行。现在有一些其他用户B,它有权在其他服务器上ssh并在该服务器上运行一些命令。代码如下:Ruby与不同用户运行bash命令

Net::SSH.start(server, username, :password => password) do |ssh| 
    ssh.exec("set of commands authorised to B") 
end 

我怎样才能改变用户在执行时上述任务,不是再次搬回到用户A.我被检查宝石popen4,但未能发现b。如果我可以开始与一个过程不同的用户。

+0

我不完全知道你在这里真正问的是什么,但是当你通过ssh连接时,你将运行一个shell作为你用来连接的用户。例如。如果我运行'ssh saurabh @ example.com',我将在远程服务器(example.com)上以'saurabh'登录,而不是以本地unix用户身份登录,或者在用户拥有Web进程的情况下以rails身份登录。 – max

回答

3

在UNIX进程模型中,您可以在用户之间切换,但只有在您使用root级别的访问权限运行时才允许这样做,这对大多数进程来说通常都是一个坏主意。

的机械过程是:

Process.uid = uid_of_user_b 

该员工Process.uid=以实现变革,但它会报错了,如果你不能做到这一点。

sudo工具是一个很好的选择。你可以做这样的事情:

sudo -u user_b command 

这将取决于sudo被正确设置你的用户。