Simple SSH connect with JSch

后端 未结 3 2030
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-30 01:38

I am trying to make something from this simple example :

SSH, execute remote commands with Android

I just want to see if I can connect from my android phone

3条回答
  •  -上瘾入骨i
    2020-11-30 01:50

    A Kotlin solution:

    import android.os.AsyncTask
    import android.os.Bundle
    import android.support.v7.app.AppCompatActivity
    import com.jcraft.jsch.ChannelExec
    import com.jcraft.jsch.JSch
    import java.io.ByteArrayOutputStream
    import java.util.*
    
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            SshTask().execute()
        }
    
        class SshTask : AsyncTask() {
            override fun doInBackground(vararg p0: Void?): String {
                val output = executeRemoteCommand("demo", "password", "test.rebex.net")
                print(output)
                return output
            }
        }
    }
    
    fun executeRemoteCommand(username: String,
                             password: String,
                             hostname: String,
                             port: Int = 22): String {
        val jsch = JSch()
        val session = jsch.getSession(username, hostname, port)
        session.setPassword(password)
    
        // Avoid asking for key confirmation.
        val properties = Properties()
        properties.put("StrictHostKeyChecking", "no")
        session.setConfig(properties)
    
        session.connect()
    
        // Create SSH Channel.
        val sshChannel = session.openChannel("exec") as ChannelExec
        val outputStream = ByteArrayOutputStream()
        sshChannel.outputStream = outputStream
    
        // Execute command.
        sshChannel.setCommand("ls")
        sshChannel.connect()
    
        // Sleep needed in order to wait long enough to get result back.
        Thread.sleep(1_000)
        sshChannel.disconnect()
    
        session.disconnect()
    
        return outputStream.toString()
    }
    

    In build.gradle add:

    dependencies {
        ...
        compile group: 'com.jcraft', name: 'jsch', version: '0.1.54'
    }
    

提交回复
热议问题