ssh 和 sudo 不会启动服务

ssh 和 sudo 不会启动服务

我想通过 ssh 使用 sudo 运行命令,而不禁用“requiretty”sudo 选项。根据 /etc/sudoers :

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

一般来说,“ssh -t”工作正常。我可以运行 whoami 之类的命令:

ssh -t  'bnadmin@devgreg' 'sudo whoami'
root
Connection to hostname closed.

除了奇怪的消息“与主机名的连接已关闭”之外,它工作正常。当我试图触发本应被妖魔化的服务时,问题就出现了。如果我通过 ssh 运行它们,它们就不会启动。

以汤姆猫为例:

ssh -t 'myuser@hostname' 'sudo /usr/local/tomcat/bin/startup.sh'
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest/
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Connection to hostname closed.
$ ssh -t 'myuser@hostname' 'ps aux | grep java'
myuser  21177  0.0  0.1 106096  1380 pts/2    Ss+  17:25   0:00 bash -c ps aux | grep java
myuser  21185  0.0  0.0 103244   824 pts/2    S+   17:25   0:00 grep java
Connection to hostname closed.

除了 tomcat 之外,我的任何 init.d 启动脚本都有问题。如果我在 sudoers 文件中注释掉 requiretty 并且不使用 -t ssh 选项,那么它就会成功启动。

$ ssh 'myuser@hostname' 'sudo /usr/local/tomcat/bin/startup.sh'
$ ssh 'myuser@hostname' 'ps aux | grep java'
root   21235 90.8 69.3 3706044 701956 ?      Sl   17:30   0:39 /usr/java/latest//bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/usr/local/tomcat/bin/../spring-instrument-3.1.1.RELEASE.jar -Xms1500m -Xmx2500m -XX:PermSize=256m -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
myuser  21279  1.0  0.1 106096  1380 ?        Ss   17:30   0:00 bash -c ps aux | grep java
myuser  21287  0.0  0.0 103244   824 ?        S    17:30   0:00 grep java

所以我的问题是如何通过 ssh 使用 sudo 触发后台进程而不禁用 requiretty sudo 选项?

答案1

尝试在命令前加上 前缀nohup,如 中sudo nohup /usr/local/tomcat/bin/startup.sh

相关内容