2016-07-01 19 views
-1

Ich möchte die folgenden Befehle auszuführen: -Ausführen mehrerer Befehle auf der gleichen Bash über Java Runtime oder Process

# su - username 
$ ssh-keygen -t rsa 

3 Mal eingeben zu übergeben null ssh-keygen Optionen dann

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 0600 ~/.ssh/authorized_keys 
$ tar xzf tarpath 
$ mv untaredfile ~/somename 

am Shell-Terminal, aber über Java, dh ich muss diese Befehle automatisieren, in denen Benutzername und Tarpath dynamisch über GUI zur Verfügung gestellt werden. Ich habe versucht, es mit Java Runtime, aber war nicht in der Lage, das erwartete Ergebnis jedes Mal, wenn ich rufe Runtime.getRuntime().exec("somecommand"); es erstellt eine neue Instanz dieses Befehls, so dass alle vorherigen Befehl nicht in ihm existiert.Wie Wechsel zu Benutzer. kann mir jemand jede Lösung entweder ein eigenes Shell-Skript oder durch ProcessBuilder vorschlagen.

Antwort

0

Um zu 3 mal enter für ssh-keygen -t rsa passieren, können Sie versuchen:

echo -e "\n\n\n" | ssh-keygen -t rsa 

oder Verwendung folgenden Befehl die Passwort-Eingabeaufforderung zu verhindern und den Schlüsselpaar-Dateipfad gesetzt Pfad auf Standard:

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa 

Um mehrere Befehle in einen zu verwerfen und mit einem Benutzer mit Switching auszuführen, können Sie oder eine andere Shell-Sprache ausprobieren:

su username -c 'ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa ; cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys' 

den Prozess mit Java auszuführen, können Sie Gebrauch machen ProcessBuilder versuchen:

String username = "user"; 
String command = "ssh-keygen -t rsa -N \"\" -f ~/.ssh/id_rsa ; cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"; 
ProcessBuilder processBuilder = new ProcessBuilder("su", username, "-c", command); 
Process process = processBuilder.start(); 
+0

aber zuerst muss ich den Benutzer mit su Befehl wechseln ... ?? – Ap00rv

+0

können Sie 'su-Benutzername -c' verwenden, um' bash -c' zu ersetzen – Wilson

+0

hey danke Mann Ich habe es versucht, aber es hat nicht funktioniert .... – Ap00rv