最近项目要部署10台设备,如果每台设备都手动进行部署想想也是醉了。

  因为之前一直使用SecurityFX以及SecurityCRT,所以考虑是否可以使用基于SSH2的类库来实现文件拷贝以及远程命令调用。

  后来发现了Trilead库:

  jar下载地址:

  http://mvnrepository.com/artifact/com.trilead/trilead-ssh2/1.0.0-build221

  git源码地址:

  https://github.com/jenkinsci/trilead-ssh2/

  看到源码地址,知道了这是Jekins相关的开源项目。

  上代码:

  实现远程指令执行:

        Connection conn = new Connection("10.1.108.35");
try {
conn.connect();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
conn.authenticateWithPassword("root", "rootbd");
Session session = conn.openSession();
SFTPv3Client client = new SFTPv3Client(conn);
//client.rm("/apps/123/Nero.exe");
session.execCommand("mkdir /apps/123");
InputStream inp = session.getStdout();
InputStreamReader reader = new InputStreamReader(inp);
BufferedReader br = new BufferedReader(reader); String line = br.readLine();
System.out.println(line);

  这是前半段代码,主要是实现了远程执行指令,调用的是session的execCommand;

  还可以使用SFTPv3Client(Security FTP)内置的常用函数,ls,rm等来进行常用简单操作;

  下面是后半段代码,主要是实现了文件上传功能;

            SCPClient scpClient = conn.createSCPClient();

            System.out.println("开始拷贝文件...");
scpClient.put("e:\\tmp\\sendFiles\\Nero.exe", "/apps/123/");
System.out.println("拷贝文件完成!");
Vector<SFTPv3DirectoryEntry> files = client.ls("/apps/123");
for(SFTPv3DirectoryEntry item : files){
System.out.println("文件名称: " + item.filename);
}
/*
SFTPv3FileHandle handle = client.createFile("/apps/123/Nero.exe");
File localFile = new File("e:\\tmp\\sendFiles\\Nero.exe");
FileInputStream fis = new FileInputStream(localFile);
byte[] arr = new byte[(int) localFile.length()];
fis.read(arr);
fis.close();
client.write(handle, 0, arr, 0, arr.length);
client.closeFile(handle);
*/
client.close();
conn.close();
} catch (IOException e) {
e.printStackTrace();
}

  这里采用的是SCPClient,熟悉Linux指令的童鞋都知道SCP指令用于远程拷贝文件,局域网内部100M带宽可以达到80M/s的传输速率,很快;

  后面是实践SFTPClient的ls函数,返回的是SFTPv3DirectoryEntry的Vector(向量,具备自动伸缩功能)对象,获取远端的文件列表信息;

  最后是一大段的注释,是通过SFTPv3Client来进行传输,可以控制到字节力度,但是传输速度太慢;在网络不好的情况下,想要使用断点续传等机制可以采用。

  

  

Trilead,SSH2的Java调用的更多相关文章

  1. Ganymed SSH-2 for Java

    Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细 ...

  2. Java调用K3Cloud的密码加密算法实现登录密码检验

    背景: 最近要开始做K3Cloud移动,BOS平台的移动单据收费,就想单独做移动模块,搭建环境:后台SSH2,前端Android.在手机端登录时通过Ajax方式传递用户名和密码到后台校验,后台在去K3 ...

  3. JAVA调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...

  4. java调用mysql服务做备份与恢复

    首先添加mysql的bin到环境变量,这样可以简写部分命令,并且做到不依赖系统mysql的具体安装路径. 重启计算机可以让添加的环境变量在java代码中调用时生效.(cmd中生效但java中调用没有生 ...

  5. 存储过程详解与java调用(转)

    存储过程的一些基本语法: --------------创建存储过程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] ...

  6. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  7. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  8. 【转】java调用webservice

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  9. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

随机推荐

  1. java对IO的操作

    import java.io.*; public class HelloWorld { //Main method. public static void main(String[] args) { ...

  2. Dajngo admin使用

    Dajngo admin使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INS ...

  3. 基于flask的web微信

    web微信 1.扫码获取头像 当你打开web微信的时候,因为http是无状态的,web微信如何实时的获取用户的扫码动作? 那么这里用到的是长轮询的方式. from flask import Flask ...

  4. OOP中的逆变和协变

    逆变和协变在存在于强类型语言中,尽管非常少提及.可是里面蕴含了面向对象的世界观.感谢和我一起讨论这个问题的人. 这里用了C#.Scala的语法作为演示样例.事实上逆变和协变的概念跟语言本身关系不大.事 ...

  5. 如何在官网下载java JDK的历史版本

    如何在官网下载java JDK的历史版本 http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html 如何在官网下载java JDK的 ...

  6. SpringBoot学习笔记(4):与前端交互的日期格式

    SpringBoot学习笔记(4):与前端交互的日期格式 后端模型Date字段解析String 我们从前端传回来表单的数据,当涉及时间.日期等值时,后端的模型需将其转换为对应的Date类型等. 我们可 ...

  7. c的详细学习(9)结构体与共用体的学习(一)

    C语言提供了另外两种构造类型:结构体与公用体,用来存储若干个类型不同但彼此组成一个集合的数据总体. (1)结构体类型与结构体变量 1.定义 其一般形式为: struct  结构体类型名{ 数据类型1 ...

  8. python 批量修改预定字符串并将修改后的字符串插入文件指定位置

    下面的例子是在文件的指定位置增加指定字符串的例子 修改配置文件: def add_str(pre_str): lines = [] flag = True f = open("z.txt&q ...

  9. ubuntu14.04 安装pip vitualenv flask

    安装pip: $ apt-get install python-pip$ pip -V #查看版本 确认安装成功 安装完pip后,会发现下载的速度特别慢.按如下修改: $ vim ~/.pip/pip ...

  10. ThinkPHP的Auth类认证

    Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比RBAC更方便 .  RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了 ...