ssh 및 sudo는 서비스를 시작하지 않습니다

ssh 및 sudo는 서비스를 시작하지 않습니다

"requiretty" sudo 옵션을 비활성화하지 않고 sudo를 사용하여 ssh를 통해 명령을 실행하고 싶습니다. /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를 통해 실행하면 시작되지 않습니다.

Tom Cat을 예로 들어보겠습니다.

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 파일에서 요구 사항을 주석 처리하고 -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

그래서 내 질문은 requiretty sudo 옵션을 비활성화하지 않고 ssh를 통해 sudo를 사용하여 백그라운드 프로세스를 트리거하는 방법입니다.

답변1

nohup와 같이 명령 앞에 접두사를 붙여보세요 sudo nohup /usr/local/tomcat/bin/startup.sh.

관련 정보