我的环境使用SSH无密码身份验证为用户配置 节点服务器(Rundeck服务器)和节点目标(远程Solaris主机)之间的“主”。
在目标上,我想与用户/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
时,
我是在子shell中做的,对吧?
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:
答案 0 :(得分:1)
这是一个系统管理员的回答,但我认为你要进行两次身份验证:一次以“master”身份登录(使用master的密钥对),然后第二次“master”su su su to to to appmanager“但使用密码(因此”讲座“消息)。但我认为你第二次没有回答密码质询。我想到了一些解决这个问题的方法:
1)使用该帐户的密钥对直接登录appmanager。如果您担心appmanager帐户的安全性,可以restrict ssh remote commands等。
2)作为master,将not a script!的二进制文件(setuid)称为“appmanager”,它只调用stopApp.sh脚本。一个example。
3)将master所在的适当组设置为/ etc / sudoers中的NOPASSWD。