我是Rundeck的新手,对它感到非常惊讶,我正在尝试执行一项作业,我的场景详细如下:
-
Rundeck在节点服务器(Rundeck服务器)和节点目标(远程Solaris主机)之间配置了ssh无密码身份验证用户"master"。
-
在节点Target中,我想与用户
appmanager
一起执行脚本/app/acme/stopApp.sh
。 -
通常,当我需要运行上面的脚本时,我会手动进行:
ssh master@server
sudo su - appmanager
或简称
ssh -t master@server
sudo su - appmanager
无需密码即可工作,并最终运行(作为appmanager)
/app/acme/stopApp.sh
但我不知道如何使用Rundeck重现这些步骤。我以前读过对于每个作业行rundeck使用新ssh连接的消息,因此工作流如下对我来说总是失败的消息:
sudo:没有tty,也没有指定askpass程序远程命令失败,退出状态为1
有人能帮我解决这个问题吗?
如果没有这个功能,我就无法引入一点DevOps在我的部门-D
我阅读了用户指南和管理指南,但找不到一个简单的例子,无论是在这个论坛上,都不能跟随。
我会感谢你的帮助。
Rundeck版本为1.4
sudo su - appmanager
尝试打开一个登录shell,因此想要一个真正的终端。删除"-"以避免这种行为。最后,你的命令看起来像
sudo su -c /app/acme/stopApp.sh appmanager
虽然ssh登录不需要密码,但您还需要在目标服务器上配置sudo,这样它就不需要密码。
由于您只需要master用户能够以appmanager的用户身份运行命令,因此您可以完全通过sudo来处理此问题。在目标上的/etc/sudoers
中,添加:
master ALL=(appmanager) NOPASSWD: ALL
然后您的ssh命令变为:
ssh -t master@server 'sudo -u appmanager /app/acme/stopApp.sh'
如果您需要通常由appmanager登录shell处理的环境设置,则需要显式地获取该设置。(我认为部署环境设置无论如何都不应该局限于登录shell。)
关于如何让一个用户像另一个用户一样运行命令的更多详细信息,请参阅ServerFault答案和更密集的sudoers手册页。