2014-05-22 5 views
2

원격 Linux 컴퓨터의 Java 코드에서 sudo -u [USER] [COMMAND] 명령을 실행하려고하는데 아무 일도 없었습니다. 나는 ganymed-ssh2 jar을 사용합니다. sudo없이 명령을 실행할 때 작업이 완벽합니다.ssh를 통해 sudo 명령을 실행하십시오.

또한 리눅스 컴퓨터에서 sudo -u [USER] [COMMAND]을 실행하면 완벽하게 작동합니다. Java에서이 명령을 어떻게 실행할 수 있습니까? 서버의 sudoers 구성이 암호 (예 : NOPASSWD 옵션)을 요청하여 w/o 실행하는 다른 사용자의 이름으로 지정된 사용자에 의해 실행이 특정 명령을 허용하는 경우

Connection conn= SshConnection.GetConnection(hostname, username, password) 

Session sess= conn.openSession(); 

sess.execCommand(command); 
+0

당신이 암호를 언급하지 않나요? 또는 사용자가 NOPASSWD로 표시되어 sudoers 파일입니까? –

+0

암호없이 작동 – user3087375

+0

여기에 출력이 있습니까? –

답변

1

당신은 원격으로 실행할 수 있습니다. sudo의 비밀번호 입력은 원격으로 할 수없는 대화 형 키보드 일 수 있습니다.

+0

비 대화 형 부분은 전적으로 사실이 아닙니다. API가 대화 형 세션을 가짜로 만들 필요가있는 경우 원격으로 비밀번호를 제공하는 API를 사용할 수 있습니다. – lijat

+0

sudoers 구성은이 명령을 허용합니다. – user3087375

2

보안 스트림을 가져 와서 암호를 전달해야합니다.

Channel channel = session.openChannel("exec"); 
((ChannelExec) channel).setCommand("sudo -S -p '' " + command); 
channel.setInputStream(null); 
OutputStream out = channel.getOutputStream(); 
((ChannelExec) channel).setErrStream(System.err); 
InputStream in = channel.getInputStream(); 
((ChannelExec) channel).setPty(true); 
channel.connect(); 
out.write((password + "\n").getBytes()); 
out.flush();; 

여기에서 촬영 :`sudo`와 COMAND을 실행하는 동안 http://codeflex.co/java-run-sudo-command-on-remote-linux-host/

관련 문제