Ganymed SSH-2 for Java 是什么

Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。官网地址为 http://www.ganymed.ethz.ch/ssh2/ 可以看到最后的更新日志为2006年,是比较古老的一个工具了。下面看看这个工具可以做什么。

环境准备

Linux服务器准备

测试时在本机上装了一个Ubuntu的虚拟机,由于新装的机器没有ssh服务端,所以需要先安装openssh-server。

更新下系统工具和依赖

sudo apt-get update;

执行安装命令

sudo apt-get install openssh-server openssh-client

安装完成之后可以通过 sudo ps -e |grep ssh 查看ssh是否在运行。如果结果存在sshd则表示ssh服务已经在运行。可以通过 sudo service ssh start 来启动ssh服务。

配置好ssh服务之后即可通过本地机器的终端ssh连接到linux机器。

Java代码连接测试

ssh登录远程机器测试

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.Session;

import ch.ethz.ssh2.StreamGobbler;

public class Basic {

public static void main(String[] args) {

String hostname = "192.168.1.101";//远程机器IP

String username = "sss";//登录用户名

String password = "123456";//登录密码

try {

Connection conn = new Connection(hostname);

conn.connect();

boolean isAuthenticated = conn.authenticateWithPassword(username, password);

///是否登录成功

if (isAuthenticated == false) {

throw new IOException("Authentication failed.");

}

Session sess = conn.openSession();

//执行命令

sess.execCommand("uname -a && date && uptime && who");

System.out.println("Here is some information about the remote host:");

InputStream stdout = new StreamGobbler(sess.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

while (true) {

String line = br.readLine();

if (line == null)

break;

System.out.println(line);

}

/* Show exit status, if available (otherwise "null") */

System.out.println("ExitCode: " + sess.getExitStatus());

//关闭连接

sess.close();

conn.close();

} catch (IOException e) {

e.printStackTrace(System.err);

System.exit(2);

}

}

}

以上代码执行结果如下:

Here is some information about the remote host:

Linux sss-VirtualBox 4.13.0-16-generic #19-Ubuntu SMP Wed Oct 11 18:35:14 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

2017年 11月 16日 星期四 19:19:12 CST

19:19:12 up 1:21, 2 users, load average: 0.00, 0.00, 0.00

sss tty2 2017-11-16 17:58 (/dev/tty2)

sss pts/1 2017-11-16 18:01 (10.15.233.83)

ExitCode: 0

从服务器删除文件

在服务器的用户目录下执行touch命令新建一个文件

touch test.txt

//...建立连接

boolean isAuthenticated = conn.authenticateWithPassword(username, password);

if (isAuthenticated == false) {

throw new IOException("Authentication failed.");

}

System.out.println("连接服务器成功!");

SFTPv3Client sftpClient = new SFTPv3Client(conn);

sftpClient.rm("/home/sss/test.txt");//删除文件

sftpClient.close();

//。。。关闭连接

如果要删除的文件不存在,则会抛出如下异常

ch.ethz.ssh2.SFTPException: No such file (SSH_FX_NO_SUCH_FILE: A reference was made to a file which does not exist.)

at ch.ethz.ssh2.SFTPv3Client.expectStatusOKMessage(SFTPv3Client.java:555)

at ch.ethz.ssh2.SFTPv3Client.rm(SFTPv3Client.java:969)

at ganymed.DeleteServerFile.main(DeleteServerFile.java:25)

从服务器删除文件夹

//。。。建立连接

SFTPv3Client sftpClient = new SFTPv3Client(conn);

sftpClient.rmdir("/home/sss/test/");//删除文件夹 Remove an empty directory

sftpClient.close();

//。。。关闭连接

注意,以上删除文件夹的方法只能删除空文件夹。如果要删除非空文件夹则需要采用其他方法。

从服务器删除非空文件夹

使用touch命令及mkdir命令在服务器上用户目录下创建一些文件和子文件夹。

//。。。建立连接

String cmd = " rm -rf /home/sss/test";

Session session = conn.openSession();

session.execCommand(cmd);

session.close();

//。。。关闭连接

从服务器下载文件

//。。。建立连接

SCPClient client = new SCPClient(conn);

//从服务器下载文件

client.get("/home/sss/sss.txt", "/Users/sss/");

//。。。关闭连接

上传文件到服务器

//。。。建立连接

SCPClient client = new SCPClient(conn);

//上传文件至服务器

client.put("/Users/sss/s.txt", "/home/sss/");

//。。。关闭连接

以上为一些基础命令的用法,通过结合一些常用的运维命令即可实现一个运维系统的功能。

java ganymed ssh2_Ganymed SSH-2 for Java学习笔记相关推荐

  1. 《Java Web开发入门很简单》学习笔记

    <Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...

  2. Java中如何创建自定义的注解学习笔记(MD版)

    概要 Java中如何创建自定义的注解学习笔记(MD版). 博客 博客地址:IT老兵驿站. 前言 记得这篇笔记还是在泉州的龙玲酒店记录的,是一个周六的晚上,坐飞机从上海到泉州,从笔记中能勾起一些旅游的回 ...

  3. Java Web--HTML、CSS、JavaScript详细学习笔记(内含丰富示例代码)

    ** Java Web–HTML.CSS.JavaScript学习笔记 ** HTML(Hyper Text Markup Language超文本标记语言):控制的是页面的内容,是由标签组成的语言,能 ...

  4. 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)

    深入理解Java虚拟机(第3版)学习笔记--JAVA内存区域(超详细) 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 对象的创建 对象的内存布局 ...

  5. java中线程总结_java中多线程学习笔记总结

    线程的简单学习笔记: 1.进程与线程的概念 进程:从用户角度看进程是应用程序的一个执行过程. 从操作系统核心角度看进程代表的是操作系统分配的内存和CPU时间片等资源的基本单位,是为正在运行的程序提供的 ...

  6. 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)

    文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...

  7. java中的枚举类与注解学习笔记

    java中的枚举和注解 01.枚举类的使用 1.1.枚举类的理解 1.2.自定义枚举类 1.3.使用enum关键字定义枚举类 1.4.Enum类中的常用方法 1.5.使用enum关键字定义的枚举类实现 ...

  8. java后验条件_JAVA并发实战学习笔记——3,4章~

    JAVA并发实战学习笔记 第三章 对象的共享 失效数据: java程序实际运行中会出现①程序执行顺序对打乱:②数据对其它线程不可见--两种情况 上述两种情况导致在缺乏同步的程序中出现失效数据这一现象, ...

  9. Java 本地接口(JNI)编程指南和规范学习笔记2

    1.JNI和线程: Java 虚拟器支持控制并发的在一样地址空间中执行的多线程,多线程可以访问同一个对象,同一个文件描述符. 多线程的限制: 一个"JNIEnv"指针只在和其关联的 ...

  10. 尚硅谷Java大厂面试题第2季学习笔记(垃圾收集器部分)

    1.GC垃圾回收算法和垃圾收集器关系 天上飞的理念,要有落地的实现(垃圾收集器就是GC垃圾回收算法的实现) GC算法是内存回收的方法论,垃圾收集器就是算法的落地实现 GC算法主要有以下几种 引用计数( ...

最新文章

  1. 推荐系统超级公开课报名!
  2. linux系统自带python_Linux删除系统自带版本Python过程详解
  3. Sprint Application bootstrap的研究和调试
  4. c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...
  5. 【渝粤题库】陕西师范大学151101 经济法概论作业 (笔试题型)
  6. 手把手教用XNA开发winphone7游戏(三)
  7. 用GDB调试Segmentation Fault错误
  8. (86)FPGA同步复位与异步复位-面试必问(十)(第18天)
  9. lisp用entmake生产圆柱体_铝型材挤压生产金属流动与模具分析
  10. ubuntu 搭建 php 环境
  11. AMD GPU任务调度(1)—— 用户态分析
  12. 【MQTT基础篇(七)】MQTT主题
  13. 国内有那些chia矿池,chia矿池排行那几家比较靠谱
  14. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...
  15. 安装ATOM并使用apm
  16. Python中字典的应用及相关操作!
  17. 龙珠激斗获取服务器信息中,龙珠激斗战力220000贝吉塔快速获得途径攻略汇总详解...
  18. 从芯片小厂成为显卡巨头,23年里,N厂经历了什么?
  19. 在Unity使用键盘控制摄像机的移动以及用鼠标滚轮控制摄像机视野放大和缩小
  20. 制作强制删除文档 删除已损坏的文件

热门文章

  1. Ubuntu 14.04 64位版安装 QQ国际版实测可用
  2. 产品经理如何写一看就想约的简历?
  3. 读科研论文的三个层次、四个阶段与十个问题
  4. nebula索引规整介绍
  5. sqli-labs靶场第十六关
  6. c++ 计算长方形面积 类对象传参
  7. 【C语言】字符串拼接函数拷贝函数
  8. Anaconda环境下的wheel文件安装
  9. ubuntu 服务器防止误删文件或误删文件
  10. matlab可以仿真开关电源吗,开关电源系统可以用()软件进行仿真。A、AnsysB、MatlabC、ProtelD、AutoCAD...