Kotlin SSH Verbindung mit JSch

missy72

Bekanntes Mitglied
Guten Morgen,

Kann mir jemand sagen, warum meine Funktion beim zweiten Aufrufen in Zeile 8 immer hängen bleibt ?
Schon mal Danke.

Java:
 fun sshPrintDirectory(){

        channelExec.setCommand("pwd")
        val inputStream = channelExec.inputStream

        channelExec.connect()

        val result = inputStream.bufferedReader().use {
            it.readText() }

        println(result)

        inputStream.close()
        channelExec.disconnect()

    }
 

KonradN

Super-Moderator
Mitarbeiter
Ich kann der Beschreibung erst einmal nicht ganz folgen. Wann genau passiert was? Was ist der genaue Ablauf?

Wenn Du die Methode mehrfach aufrufst: In der Methode wird der channel disconnected. Ohne neue Verbindung wirst Du da kaum einen Befehl absetzen können.
 

missy72

Bekanntes Mitglied
Ich habe eine Klasse erstellt für die SSH Verbindung -> SSHConnection.
Bis jetzt habe ich drei Funktionen: sshOpen, sshPrintDirectory und sshClose.
In meiner Main erstelle ich ein ein Object der Klasse und rufe die Funktion sshOpen auf.
Um die Funktion erstmal zu teste rufe ich zwei mal nacheinander die Funktion sshPrintDirectory auf.
Beim ersten Mal, bekomme ich wie erwartet mein Verzeichnis zurück (PWD).
Dann rufe ich die Funktion sshPrintDirectory gleich noch mal auf, weiter nichts.
In der Zeile, in der ich mein Inputstream in der var result speichern möchte (Zeile 29), bleibt das Programm hängen. Dieses muss ich dann selbst stoppen.


Java:
class SSHConnection() {

    val jsch = JSch()
    lateinit var session: Session
    lateinit var channelExec: ChannelExec


    fun sshOpen(){

        val username = "root"
        val host     = "192.168.1.4"
        val port     = 22
        val password = "root"

        session = jsch.getSession(username, host, port)
        session.setConfig("StrictHostKeyChecking", "no")
        session.setPassword(password)
        session.connect()
        channelExec = session.openChannel("exec") as ChannelExec
    }

    fun sshPrintDirectory(){

        channelExec.setCommand("pwd")
        val inputStream = channelExec.inputStream

        channelExec.connect()
       
        val result = inputStream.bufferedReader().use {
            it.readText() }
        println("test")
        println(result)

        inputStream.close()
        channelExec.disconnect()

    }

    fun sshClose(){

        channelExec.disconnect()
        session.disconnect()
       
    }
 

KonradN

Super-Moderator
Mitarbeiter
Damit öffnest Du den Channel:
channelExec = session.openChannel("exec") as ChannelExec

Damit schließt Du den Channel:
channelExec.disconnect()

Du darfst bei sshPrintDirectory natürlich nicht den Channel schließen, denn sonst kann natürlich beim zweiten Aufruf damit nicht gearbeitet werden.
Du willst den Channel also nur im sshClose schließen.
 

missy72

Bekanntes Mitglied
Supi war doch ganz einfach.
Ich habe das channelExec.connect völlig fasch interpretiert. Ich dachte ich öffne und schließe den Channel immer wieder.
Zeile 35 gelöscht nun läuft alles.

Vielen Dank mal wieder.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
AllBlack Suche Programmierer in Java und Kotlin mit dem ich mich Selbstständig machen kann Android & Cross-Platform Mobile Apps 23
M Android Kotlin: Bitte dringend um Hilfe Android & Cross-Platform Mobile Apps 2
Naxon89 Duplicate class kotlin - und dies ohne das es angewendet wird Android & Cross-Platform Mobile Apps 1
OnDemand CrossPlatform Kotlin iOs/Android Datenverbrauch Android & Cross-Platform Mobile Apps 2
C SQLite Datenbank in Kotlin - App stürtzt immer ab Android & Cross-Platform Mobile Apps 0
J Android VPN Verbindung herstellen? Android & Cross-Platform Mobile Apps 4
B Android TCP-Verbindung zum Server über welche Prozess auslagerung nutzen? Android & Cross-Platform Mobile Apps 1
M Problem bei Werteübergabe, MSQL verbindung Android & Cross-Platform Mobile Apps 3
H WIFI, Bluetooth und NFC Verbindung überwachen Android & Cross-Platform Mobile Apps 1
H Android 3G TCP Socket Verbindung zum PC durch NAT Android & Cross-Platform Mobile Apps 8
T Android MSSQL Verbindung herstellen - Android Studio Android & Cross-Platform Mobile Apps 2
M Android Server-Client-Verbindung in Android-App mit Sockets aufbauen Android & Cross-Platform Mobile Apps 5
W Android HTTPS-Verbindung mit Client-Authentifizierung Android & Cross-Platform Mobile Apps 0
R Socket Verbindung AsycTask Android & Cross-Platform Mobile Apps 5
F Android USB Verbindung zu Windows Programm Android & Cross-Platform Mobile Apps 3
U Android Https-Verbindung Android & Cross-Platform Mobile Apps 2
K Java ME Bluetooth verbindung parameter Android & Cross-Platform Mobile Apps 3
N Java ME Server-Client Verbindung über Wifi Android & Cross-Platform Mobile Apps 6
A Problem mit HTTP- Verbindung Android & Cross-Platform Mobile Apps 4
N Handy -PC Verbindung Android & Cross-Platform Mobile Apps 2
N Blutooz-Verbindung ... ich schaffs nicht Android & Cross-Platform Mobile Apps 5
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
G Bluetooth Verbindung zwischen Handy und PC Android & Cross-Platform Mobile Apps 5
G Bluetooth Verbindung Android & Cross-Platform Mobile Apps 2
O Bluetooth Verbindung zwischen 2 Handys Android & Cross-Platform Mobile Apps 5
K HTTP-Verbindung mit J2ME.... Android & Cross-Platform Mobile Apps 2
J Download und speichern mit jsch klappt nicht Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben