本文实现的是如何使用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方法,来获取数据的总大小,然后循环去读。

Android实现SSH Client相关推荐

  1. 手机连接Linux系统 JuiceSSH - SSH Client(Android免费的SSH客户端)

    手机连接Linux系统 JuiceSSH - SSH Client(Android免费的SSH客户端) 最近迷上Linux远程连接,以前经常尝试各种方式连接Linux服务器,发现手机上解决方案,Jui ...

  2. android处理服务器的集合,android集合SSH搭建服务器客户端请求

    android集合SSH搭建服务器客户端请求 (2012-06-14 06:21:53) 标签: android 服务器 杂谈 android集合SSH搭建服务器客户端请求小弟以前是学的J2EE,由于 ...

  3. A free SSH client - putty[]

    This is a open source project at http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html. In ...

  4. android异步网络连接开源:Android Asynchronous Http Client

    在github发现还有一个Android Asynchronous Http Client,发现也不错.基于异步方式执行android内置的apache httpClient组建,http请求在UI线 ...

  5. JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决

    最近公司在使用一个java ssh client(JTA http://javassh.org/space/start)来做为web页面中远程telnet/ssh机器的客户端,但是在使用jta提供的a ...

  6. bitwise ssh client的使用

    前言   windows下的ssh客户端很多,bitwise ssh client是其中比较好的一款,功能也很强大,于是特地在博客里头介绍一下. 使用方法   直接在浏览器搜索bitwise ssh ...

  7. Bitvise SSH Client 8.32下载

    Bitvise SSH Client 8.32 链接:https://pan.baidu.com/s/19gAmIY2BRYXa9-yIyacibQ 提取码:q5pb

  8. Dropbear替代Openssh-ssh client使用

    替代纯属无奈之举,本来安装了一个Manjaro Linux桌面版本尝鲜,但在使用其ssh远程访问其他服务器和网络设备时发现失败报错,重装了openssh,问题依然存在 选择Dropbear替代方案 D ...

  9. Bitvise SSH Client连接不上linux,“请求被积极拒绝”

    2019独角兽企业重金招聘Python工程师标准>>> 一直使用SecureCRT后来想试试Bitvise SSH Client,装上之后,输入ip,用户名,密码却总是连接不上Ubu ...

最新文章

  1. Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment
  2. 百练OJ:2742:统计字符数
  3. 2010Bossie大奖:十佳开源平台和中间件
  4. 取消一个请求(Cancel)
  5. Python 读写配置文件模块: configobj 和 configParser
  6. 底层主播生存录:玩不好算法,去不了塔尖
  7. .WeightedRandomSampler(3)
  8. java 字符串常用函数_Java学习笔记35:Java常用字符串操作函数
  9. lesson1 ODE的几何解法:方向场,积分曲线
  10. 信息系统项目管理师计算题(进度管理总浮动时间、自由浮动时间、工期)
  11. 数量关系-经济利润问题
  12. 电子护照阅读器便捷通行管理系统
  13. 读高明之《帛書老子校注》
  14. 架构思维成长系列教程(十二)- 云平台架构设计
  15. verilog prbs
  16. 第六周 day6 python学习笔记
  17. Boosting三巨头:XGBoost、LightGBM和CatBoost(发展、原理、区别和联系,附代码和案例)
  18. 木瓜抗疲劳 3种木瓜牛奶做法
  19. 纯文字网页数据的批量下载--以NOAA为例
  20. OneUI极强的 Bootstrap 管理仪表板模板

热门文章

  1. 源于小程序智能名片的两点思考
  2. 亿图图示--工业自动化模块--啤酒生产处理流程简图和热水冷凝处理架构
  3. HDFS文件系统的根目录和用户主目录解析
  4. Java计算文章多少字_java计算中文字数的代码实例
  5. Flutter强制某个页面横屏
  6. 洪水攻击程序c语言,洪水攻击原理及代码实现全攻略(附源代码)
  7. 无情刀永不知错,无缘分只叹奈何
  8. 通过mqtt再利用移动oneNet平台的连接与数据收发
  9. Java学习-面向对象进阶
  10. LeetCode(力扣) 刷题注意事项 持续更新 ~ ~