我正在尝试从 Java 运行以下命令deploy
(JVM 以用户身份运行tomcat
):
sudo -u deploy /path/to/my/bash/script.sh PARAM1 PARAM2
我的 sudoers 文件包含以下内容:
tomcat ALL=(deploy) NOPASSWD: /path/to/my/bash/script.sh *
但我进入sorry, you must have a tty to run sudo
了我的 Java 应用程序。因此,我将调用更改为:
su --session-command="/path/to/my/bash/script.sh PARAM1 PARAM2" deploy
但现在我进入standard in must be a tty
了Java。
我已经检查过,通过执行以下操作,我可以看到它sudo
不会提示输入密码,但su
会提示输入密码。
[root@mybox bin]# sudo su tomcat
[tomcat@mybox bin]$ sudo -u deploy /path/to/my/bash/script.sh PARAM1 PARAM2
output of script with PARAM1 PARAM2
[tomcat@mybox bin]$ su --session-command="/path/to/my/bash/script.sh PARAM1 PARAM2" deploy
Password:
su: incorrect password
显然sudoers
只是为了sudo
(因此得名)。是否有另一种在deploy
没有密码提示的情况下运行命令的方法?
我正在 centos 6.3 上开发它,但它最终将在 RHEL5 上运行。
答案1
您可以requiretty
在 中放松身心/etc/sudoer
。
摘自 sudoers 手册页
requiretty If set, sudo will only run when the user is logged in to a real
tty. When this flag is set, sudo can only be run from a login
session and not via other means such as cron(8) or cgi-bin
scripts. This flag is off by default.
默认情况下,此行表示每个人在使用时都必须具有 tty 访问权限sudo
:
Defaults requiretty
您可以按用户和/或组放松它,如下所示:
$ sudo visudo
# group
Defaults:%group !requiretty
# user
Defaults:user !requiretty
笔记:办法。!
not