Huhu,
ich teste gerade etwas mit ssh und der ganymed ssh Libary.
Angenommen ich bin bereits auf dem Host eingeloggt und möchte nun mit sudo den User wechseln. Das ganze soll nicht über das Terminal sonder via einem JDialog geschehen, d.h. der Benutzer gibt UserName und Passwort in 2 Textfelder ein und ich schicke den sudo Befehl an den Host.
Nun möchte dieser ja ein Passwort von mir.
Wie kann ich das an den Host zurück schicken, damit der Benutzerwechseln stattfindet?
Habe schon einiges probiert allerdings klappt das irgendwie nie. Hier mal ein Lösungsansatz (Habe es auch schon mit Buffered Reader und dem StreamGobbler versucht). So wie es hier am Beispiel ist, bekommen ich das "Password:" als response (seltsamerweise aber vom stderr), wenn ich das pw dann abschicke kommt nochmal ein "\n" vom Host, was ja eigentlich richtig ist oder (komischerweise auch vom stderr)??? Aber wenn ich "whoami" ausführe wurde der Benutzer nicht gewechselt?!?!
Ich weiß, ist grottig programmiert aber soll ja nur zum Testen sein
Ich danke euch schon mal jungs.
Liebe Grüße Nicole
ich teste gerade etwas mit ssh und der ganymed ssh Libary.
Angenommen ich bin bereits auf dem Host eingeloggt und möchte nun mit sudo den User wechseln. Das ganze soll nicht über das Terminal sonder via einem JDialog geschehen, d.h. der Benutzer gibt UserName und Passwort in 2 Textfelder ein und ich schicke den sudo Befehl an den Host.
Nun möchte dieser ja ein Passwort von mir.
Wie kann ich das an den Host zurück schicken, damit der Benutzerwechseln stattfindet?
Habe schon einiges probiert allerdings klappt das irgendwie nie. Hier mal ein Lösungsansatz (Habe es auch schon mit Buffered Reader und dem StreamGobbler versucht). So wie es hier am Beispiel ist, bekommen ich das "Password:" als response (seltsamerweise aber vom stderr), wenn ich das pw dann abschicke kommt nochmal ein "\n" vom Host, was ja eigentlich richtig ist oder (komischerweise auch vom stderr)??? Aber wenn ich "whoami" ausführe wurde der Benutzer nicht gewechselt?!?!
Ich weiß, ist grottig programmiert aber soll ja nur zum Testen sein
Code:
public void changeUserAtHost(String userName, char[] password)
{
try
{
Session s = getSession();
s.execCommand("sudo su - "+userName);
InputStream stdout = s.getStdout();
InputStream stderr = s.getStderr();
OutputStream stdin = s.getStdin();
byte[] buffer = new byte[8192];
boolean once = true;
// host antwort einholen
while (true)
{
if ((stdout.available() == 0) && (stderr.available() == 0))
{
int conditions = s.waitForCondition(ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA | ChannelCondition.EOF,
10000); // TODO: Options
if ((conditions & ChannelCondition.TIMEOUT) != 0)
{
throw new IOException("Timeout while waiting for data from peer.");
}
if ((conditions & ChannelCondition.EOF) != 0)
{
if ((conditions & (ChannelCondition.STDOUT_DATA | ChannelCondition.STDERR_DATA)) == 0)
{
break;
}
}
}
while (stdout.available() > 0)
{
int len = stdout.read(buffer);
if (len > 0)
{
System.out.write(buffer, 0, len);
}
}
while (stderr.available() > 0)
{
int len = stderr.read(buffer);
if (len > 0)
{
System.out.write(buffer, 0, len);
}
}
// password senden
if (once)
{
for (char c : password)
stdin.write(c);
stdin.write(13); // == \n
once = false;
}
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Ich danke euch schon mal jungs.
Liebe Grüße Nicole