2016-09-12 3 views
-1

Ich habe einen Webserver (Anlegesteg), der Operationen auf einem Remote-Host mit SSH ausführen muss. Der Server läuft als root und ich möchte, dass es so bleibt.Führen Sie eine SSH-Verbindung als ein anderer Benutzer in Java

Auf dem WebServer-Maschine, als root, kann ich sudo -su user ssh [email protected] ausführen. Dieser Befehl öffnet eine SSH-Sitzung für sshServer mit "user" als Benutzer. Das Schöne daran ist, dass es die SSH-Sitzung mit der ssh-keys-Datei des Benutzers startet und kein Passwort benötigt.

Ich möchte diese Operation in Java nachahmen. Ich habe versucht, mehrere SSH-Bibliotheken zu verwenden, aber es konnte nicht funktionieren. Immer wenn ich versuche, mich als ein anderer Benutzer zu verbinden, muss ich das Passwort des Benutzers angeben. Mit anderen Worten, ich kann Java bitten, sich als "Benutzer" am sshServer anzumelden, aber ich kann Java nicht bitten, den ssh-Verbindungsbefehl als "Benutzer" auszuführen. Ich glaube, dass die Schlüsseldatei nur verwendet wird, wenn der ssh-connection-Befehl als "user" ausgeführt wird.

Bitte beachten Sie, dass der Benutzer mein angemeldeter Benutzer für die Anmeldung am sshServer ist. root selbst hat keine ssh keys Datei und es ist kein registrierter Benutzer, mit dem ich mich bei sshServer anmelden kann. Ich möchte vermeiden, das Passwort des Benutzers im Code oder durch eine andere Verschleierung zu speichern. Ich kann auch keine anderen Benutzer erstellen, deren Passwörter ich in irgendeiner Weise gefährden kann.

Wenn jemand eine Bibliothek kennt, die dies oder einen anderen Weg erlaubt, die Operation durchzuführen, wäre ich dankbar.

+0

haben Sie versucht jsch? –

+0

In der Tat verwende ich das gerade. Wenn Sie wissen, wie es funktioniert, können Sie uns bitte ein kurzes Beispiel geben? Vielen Dank! – soundwave

+0

Hört sich an, als würden Sie ein großes Sicherheitsloch schaffen. Ich möchte kein Benutzer auf Ihrem Computer sein. Das heißt, Java hat keine "su"/"sudo" -Fähigkeit, aber wenn Sie sich nicht um Sicherheit kümmern und Ihre Benutzer ihre privaten Schlüssel nicht mit einer Passphrase schützen, können Sie einfach direkt die private Schlüsseldatei von Benutzer (entweder kopieren Sie es oder zeigen Sie Ihre Bibliothek auf die private Schlüsseldatei des Benutzers) - da Sie Java scheinbar als root ausführen. Sie haben keinen Code angezeigt, daher ist es schwer zu sagen, wie Sie das in Ihrem Fall tun können. –

Antwort

1

JSch zertifikatsbasierte Authentifizierung:

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,

Gal

Verwandte Themen