2016-09-12 2 views
-1

ssh를 사용하여 원격 호스트에서 작업을 수행해야하는 웹 서버 (부두)가 있습니다. 서버가 루트로 실행되며 그 방법대로 유지하고 싶습니다.Java에서 다른 사용자로 ssh 연결을 실행하십시오.

webServer 컴퓨터에서 root로 sudo -su user ssh [email protected]을 실행할 수 있습니다. 이 명령은 "user"를 사용자로 사용하여 sshServer에 대한 ssh 세션을 엽니 다. 좋은 점은 사용자의 ssh-keys 파일을 사용하여 ssh 세션을 시작하고 암호가 필요 없다는 것입니다.

Java에서이 작업을 모방하고 싶습니다. 여러 ssh 라이브러리를 사용해 보았지만 작동시키지 못했습니다. 다른 사용자로 연결하려고 할 때마다 사용자의 비밀번호를 제공해야합니다. 즉, Java에 sshServer에 "사용자"로 로그온하도록 요청할 수 있지만 Java에서 ssh-connection-command를 "사용자"로 실행하도록 요청할 수는 없습니다. 키 파일은 ssh-connection-command를 "user"로 실행할 때만 사용됩니다.

사용자는 sshServer에 로그온하기위한 지정된 사용자입니다. root 자체에는 ssh 키 파일이 없으며 sshServer에 로그온 할 수있는 등록 된 사용자가 아닙니다. 나는 코드에 또는 다른 모호한 방법을 통해 사용자 비밀번호를 저장하는 것을 피하고 싶습니다. 어떤 방법 으로든 암호가 위태로울 수있는 다른 사용자를 만들 수 없습니다.

다른 사람이이 작업을 수행 할 수있는 라이브러리를 알고 있다면 감사하게 생각합니다.

+0

당신이 시도 않았다 jsch? –

+0

사실, 그게 내가 현재 사용하고있는 것입니다. 어떻게 작동시키는 지 안다면 간단한 예를 들려 주시겠습니까? 감사! – soundwave

+0

큰 보안 구멍이 생기는 것 같습니다. 귀하의 컴퓨터에서 사용자가되고 싶지 않습니다. 즉, java는 "su"/ "sudo"기능을 가지고 있지 않지만 보안에 신경 쓰지 않고 사용자가 개인 키를 암호로 보호하지 않으면 직접 암호 키로 개인 키 파일을 사용할 수 있습니다. 사용자 (루트 파일을 복사하거나 사용자의 개인 키 파일에서 라이브러리를 가리 키도록하십시오) - Java를 루트로 사용하고 있기 때문에. 어떤 코드도 표시하지 않았으므로 자신의 경우에 그렇게하는 법을 말하기 어렵습니다. –

답변

1

JSCH 인증서 기반 인증 :

JSch jsch = new JSch(); 

// Here privateKey is a file path like "/home/me/.ssh/secret_rsa " 
// passphrase is passed as a string like "mysecr" 
jsch.addIdentity(privateKey, passphrase); 

session = jsch.getSession(user, host, port); 
session.setConfig("StrictHostKeyChecking", "no"); 
// Or yes, up to you. If yes, JSch locks to the server identity so it cannot 
// be swapped by another with the same IP. 

session.connect(); 
channel = session.openChannel("shell"); 
out = channel.getOutputStream(); 
channel.connect(); 

HTH,

관련 문제