繁体   English   中英

使用Net :: SSH Ruby库来执行需要sudo su的远程命令-另一个用户

[英]Using Net::SSH Ruby library to remote command execution that requires sudo su - another user

我的环境为节点服务器(Rundeck服务器)和节点目标(远程Solaris主机)之间的用户“主”配置了SSH无密码身份验证。

在目标,我想执行一个脚本/app/acme/stopApp.sh与用户appmanager

通常,当我需要手动运行脚本时,可以使用:

ssh master@server sudo su - appmanager

或者简单地:

ssh -t master@server 'sudo su - appmanager'

无需密码即可工作并最终运行(以appmanager身份):

/app/acme/stopApp.sh

但是我无法弄清楚如何使用Net :: SSH重现这些步骤。 当我执行sudo su - appmanager然后执行/app/acme/stopApp.sh ,我正在子外壳中执行它,对吗?

require 'rubygems'
require 'net/ssh'
require 'net/scp'
require 'crypt/blowfish'
require 'yaml'

#
# ...
#

Net::SSH.start( host, user, :password => password ) do |session|

  # It's possible to proceed in this way?
  cmd = 'sudo su - appmanager;/app/acme/stopApp.sh'  
  ses = session.exec!( cmd )

end

我意识到,如果我尝试在目标服务器上执行类似的操作:

sudo su -c /app/acme/stopApp.sh appmanager

我收到以下消息:

We trust you have received the usual lecture from the local System Administrator. 

It usually boils down to these three things: 

 #1) Respect the privacy of others. 
 #2) Think before you type. 
 #3) With great power comes great responsibility. Password:

Password:

这是一个sysadmin-y答案,但是我认为您要进行两次身份验证:一次以“ master”身份登录(使用master的密钥对),然后第二次“ master”将su sudo到“ appmanager”,但是使用密码(因此出现“演讲”消息)。 但是我认为您第二次没有回答密码挑战。 有几种方法可以解决此问题:

1)使用该帐户的密钥对直接以appmanager身份登录。 如果您担心appmanager帐户的安全性,则可以限制ssh远程命令

2)以master身份,调用setuid为“ appmanager”的二进制文件( 而不是脚本! ),该二进制文件仅调用stopApp.sh脚本。 一个例子

3)在/ etc / sudoers中将master所在的适当组设置为NOPASSWD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM