Java JSch wechselt den Benutzer auf der entfernten Maschine und führt den Befehl aus

Ich versuche eine Verbindung zu einem Host herzustellen, ändere dann den Benutzer mit "su - john" und führe dann einen Befehl als john aus. Ist es möglich, nur JSch zu verwenden?

Das Problem ist, dass, nachdem ich eine Sitzung erstellt und den Kanal geöffnet und den oben genannten Befehl ausgeführt habe, das Kennwort abgefragt werden sollte, aber nichts passiert.

So verbinde ich mich mit dem entfernten Rechner:

String address = "myremote.computer.com";

JSch jsch = new JSch();
String user = "tom";
String host = address;
String password = "l33tpaSSw0rd";
Session session = jsch.getSession( user, host, 22 );
java.util.Properties config = new java.util.Properties();
config.put( "StrictHostKeyChecking", "no" );
session.setConfig( config );
session.setPassword( password );

session.connect();

Dann führe ich Befehle über ausrunSshCommand() Methode, die so aussieht:

try
{
    Channel channel = session.openChannel( "exec" );
    channel.setInputStream( null );
    channel.setOutputStream( System.out );

    ( (ChannelExec) channel ).setCommand( command );

    channel.connect();

    InputStream in = channel.getInputStream();

    byte[] tmp = new byte[1024];
    while ( true )
    {
        while ( in.available() > 0 )
        {
            int i = in.read( tmp, 0, 1024 );
            if ( i < 0 )
            {
                break;
            }
            System.out.print( new String( tmp, 0, i ) );
       }
       if ( channel.isClosed() )
       {
           break;
       }
       try
       {
           Thread.sleep( 1000 );
       }
       catch ( Exception ee )
       {
       }
   }
   channel.disconnect();
}
catch ( Exception e )
{
   e.printStackTrace();
}

Muss ich einen anderen Kanal erstellen, wenn ich den Nutzer wechsle, oder wie kann ich das erreichen?

Denn wenn ich benutze

runSshCommand("su - john",session);
runSshCommand("tail -1 ~/mylog.log",session);

es führt nur den "su" -Befehl aus, beendet aber nicht den Benutzerwechsel und danach führt das Ausführen von "tail" zu einem Fehler, da "tom" die Datei nicht hat: /

Grundsätzlich möchte ich, dass meine Anwendung eine Verbindung zum Computer herstellt, den Benutzer wechselt, eine Datei liest und die Daten zurückgibt. Kann jemand bitte Licht ins Dunkel bringen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage