通过 tty 运行命令而不注释掉“requiretty”

通过 tty 运行命令而不注释掉“requiretty”

我在 CentOS 上运行最新版本的 Jenkins。在我的 Jenkins 作业中,我可以运行构建后步骤,并包含此命令,

sudo /bin/rm /usr/java/jboss/server/default/deploy/myclient-1.0.war

因错误而死亡

sudo: sorry, you must have a tty to run sudo

有没有办法重写上面的代码,通过 tty shell 运行命令?在我们的 /etc/sudoers 文件中,有以下行

Defaults    requiretty

但是我们的系统管理员禁止我们将其注释掉。

答案1

如果/usr/java/jboss/server/default/deploy/myclient-1.0.war必须由 root 删除,那么你可能做错了。我想不出该文件需要由 root 拥有的充分理由。

另一个选择是看看你的系统管理员对禁用该命令的 requiretty 有何看法。

Cmnd_Alias           NOTTYCMD = /bin/rm /usr/java/jboss/server/default/deploy/myclient-1.0.war
Defaults!NOTTYCMD   !requiretty

答案2

但是我们的系统管理员禁止我们将其注释掉。

他只能为用户禁用jenkins

Defaults:jenkins    !requiretty

deploy 目录中的文件归具有jboss755 权限的用户所有,并且 Jenkins 在用户 下运行jenkins

或者使deploy文件夹组可写并设置 SGID 位:

chmod -R g+w /usr/java/jboss/server/default/deploy/
chmod g+s /usr/java/jboss/server/default/deploy/

并将jenkins用户添加到jboss组:

usermod -a -G jboss jenkins

那么您可以删除/usr/java/jboss/server/default/deploy/myclient-1.0.war而不使用sudo

答案3

当我尝试以 jboss 用户身份启动 jboss 时,我也遇到了这个问题。通过按以下方式更改文件 /etc/init.d/jboss 中的一行,解决了该问题:

之前: su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG" 2>&1 > $JBOSS_CONSOLE_LOG &

之后:su - $JBOSS_USER -c“LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG 2>&1 > $JBOSS_CONSOLE_LOG &”

相关内容