Frage

Versuchen, ein Java-Programm schreiben fähig ist, ein UNIX-Befehl, als ein anderes UNIX-Benutzer.Ich habe das Kennwort des Benutzers an, und ich weiß, dass der Befehl, den ich ausführen möchte, aber der Befehl muss ausgeführt werden, dass Benutzer -, so habe ich zu melden Sie sich als Benutzer das erste mal.

Zum Beispiel:sagen wir, wir haben einen Benutzer, jim, wer will, um zu sehen, was in bob ' s home-Verzeichnis, und (warum auch immer) jim hat Zugriff auf ausführen ls in der Erwägung, dass bob nicht. Wir sind derzeit angemeldet als bob.Hier ist, was wir (vielleicht) tun:

bob@host$ su jim && ls ~bob

Problem ist, dass wir aufgefordert, für jim ein.Da das ausführen von Java-Programm, d.h.

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

wir Holen Sie aufgefordert, jim Passwort und aufgehängt. Wir wissen, dass jim ' s password.Aber ich kann ihn nicht betreten.

Zusätzlich, wir können nicht Erwarten, dass ein script (habe es nicht installiert haben), und wir können nicht Sie sich als superuser an.Ich schaute auch in die Verwendung von SSH, dies zu versuchen, da könnten wir technisch tun

bob@host$ ssh jim@host "ls ~bob"

aber auch dies funktioniert nicht, da ich nicht die Erlaubnis zu setup ohne Passwort SSH.

Mein letzter verzweifelter Versuch ist, zu versuchen und benutzen Sie einen SSH-Bibliothek für Java, da das Passwort vorhanden ist, um das Java-Programm, und ich möchte in der Lage sein, sich mit (und führen Sie die richtige Befehl).Aber da werde ich laufen auf dem gleichen host, es scheint wie overkill.

Irgendwelche Vorschläge?

P. S:Java-version 1.4.2, können nicht aktualisieren;AIX UNIX 5.3.

War es hilfreich?

Lösung 2

Problem gelöst.Verwendet JSch (http://www.jcraft.com/jsch/) SSH in den server, mit dem bekannten Benutzernamen und Passwort ein, und der Befehl "ausführen".Vielen Dank an alle für Eure Vorschläge!

Andere Tipps

Habe sudo installiert, über die der Benutzer ausführen des Java-Programms eingetragen in /etc/sudoers, die für die Befehle in Frage, und verwenden Sie sudo -u jim ls ~bob.

Möglicherweise eine java-Implementierung Erwarten? ExpectJ kommt beim googlen aber ich konnte keine Dokumentation bezüglich der Ausführung unter 1.4.2.

Haben Sie versucht, die Umleitung des sudo-Kommandos input-und schreiben auf die.Ich habe nicht verwendet Java in eine Weile, aber ich glaube, es ist ein Weg, um die input stream Lesen und in Sie schreiben.Sie könnten, zu schreiben, das Kennwort, gefolgt von einer neuen Zeile und sudo oder su annehmen sollte das Passwort ein.

Verwenden getInputStream() und schreiben Sie Ihr Passwort in.

su jim -c ls ~Bob

Vielleicht würde das funktionieren:

Process process = Runtime.getRuntime().exec("su jim && ls ~bob");

OutputStream standardInput = process.getOutputStream();
Writer standardInputWriter = new OutputStreamWriter(standardInput);
standardInputWriter.write("password\n");
standardInputWriter.close();

Ich bin nicht sicher, dieser code:

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

ausgeführt werden, die in einer shell zur Evaluierung der &&,, dass ist, einen shell-Befehl (/bin/sh).Sie sollten, übergeben Sie den Befehl "ls ~bob" über eine Befehlszeile mit der su.Etwas wie:

su jim -c 'ls ~bob'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top