Android实现SSH Client
创始人
2024-04-22 15:33:23

本文实现的是如何使用JSCH在Android上实现一个简易版本的ssh client,来远程执行ssh命令。

1、启动ssh服务,本文以mac为例。

打开设置-->共享-->选择远程登录

2、检验ssh server是否开启成功。

     打开shell

    ssh dongxuli@ip

    输入dongxuli账户的密码,没有报错即为开始ssh server成功。

3、下载jsch.jar:jsch-0.1.55.jar包_jsch-0.1.55.jar-Linux文档类资源-CSDN下载

 4、新建Android项目并导入jsch-0.1.55.jar

5、Android源码实现ssh命令的执行:


class SSHTest {fun test(){Thread {val jsch = JSch()try {//ssh登录连接的用户名和ipval session = jsch.getSession("dongxuli", "192.168.31.123");//ssh登录连接的密码session.setPassword("123456");val config = java.util.Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);session.connect()val channelExec = session.openChannel("exec") as ChannelExecchannelExec.setCommand("ls -l /Users/xxx \n")channelExec.connect()val  inputStreamReader = BufferedReader(InputStreamReader(channelExec.inputStream))val errInputStreamReader = BufferedReader(InputStreamReader(channelExec.errStream))val runLog = StringBuilder("")val errLog = StringBuilder("")var line: String? = nullwhile (inputStreamReader.readLine().also { line = it } != null) {runLog.append(line).append("\n")}var errLine: String? = nullwhile (errInputStreamReader.readLine().also { errLine = it } != null) {errLog.append(errLine).append("\n")}Log.d("gggl" , runLog.toString())Log.d("gggl" , errLog.toString())} catch ( e : Exception) {e.printStackTrace();}}.start()}
}

执行test后会输出/User/xxx目录下的文件列表:

 

本例中使用的是ChannelExec,每次只能执行一条命令。如果想要执行多条命令,请使用ChannelShell。

ChannelExec channelExec = (ChannelExec) session.openChannel("exec");//只能执行一条指令(也可执行符合指令)
ChannelShell channelShell = (ChannelShell) session.openChannel("shell");//可执行多条指令 不过需要输入输出流

1. ChannelExec

  每个命令之间用 ; 隔开。说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
每个命令之间用 && 隔开。说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。

每个命令之间用 || 隔开。说明:|| 是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。

2. ChannelShell

  对于ChannelShell,以输入流的形式,可执行多条指令,这就像在本地计算机上使用交互式shell(它通常用于:交互式使用)。如要要想停止,有两种方式:

  发送一个exit命令,告诉程序本次交互结束;
  使用字节流中的available方法,来获取数据的总大小,然后循环去读。

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...