Jsch学习
来源:互联网 发布:python web运维自动化 编辑:程序博客网 时间:2024/06/04 15:39
实现文件上传下载
package com.sinosun;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Properties;import java.util.Vector;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session; public class Test1 { public static void main(String[] args) throws Exception { //Test1.sshSftp("192.168.238.129", "root", "123456", 22); downloadSftpFile("192.168.238.129", "root","123456", 22,"/root","C:","aa.log"); } /** * 利用JSch包实现SFTP下载、上传文件(用户名密码方式登陆) * @param ip 主机IP * @param user 主机登陆用户名 * @param psw 主机登陆密码 * @param port 主机ssh2登陆端口,如果取默认值(默认值22),传-1 * */ public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{ System.out.println("开始用户名密码方式登陆"); Session session = null; JSch jsch = new JSch(); if(port <=0){ //连接服务器,采用默认端口 session = jsch.getSession(user, ip); }else{ //采用指定的端口连接服务器 session = jsch.getSession(user, ip ,port); } //如果服务器连接不上,则抛出异常 if (session == null) { throw new Exception("session is null"); } //设置登陆主机的密码 session.setPassword(psw);//设置密码 //设置第一次登陆的时候提示,可选值:(ask | yes | no) session.setConfig("StrictHostKeyChecking", "no"); //设置登陆超时时间 session.connect(30000); sftp_put(session, "aa.log"); System.out.println("sftp成功"); } private static void sftp_put(Session session, String uploadFileName) throws Exception { Channel channel = null; try { //创建sftp通信通道 channel = (Channel) session.openChannel("sftp"); channel.connect(1000); ChannelSftp sftp = (ChannelSftp) channel; //进入服务器指定的文件夹 sftp.cd("/root"); //列出服务器指定的文件列表 Vector v = sftp.ls("/"); for(int i=0;i<v.size();i++){ System.out.println(v.get(i)); } //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了 OutputStream outstream = sftp.put(uploadFileName); InputStream instream = new FileInputStream(new File("C:\\aa.txt")); byte b[] = new byte[1024]; int n; while ((n = instream.read(b)) != -1) { outstream.write(b, 0, n); } outstream.flush(); outstream.close(); instream.close(); } catch (Exception e) { e.printStackTrace(); } finally { session.disconnect(); channel.disconnect(); } } /* * 从SFTP服务器下载文件 * * @param ftpHost SFTP IP地址 * * @param ftpUserName SFTP 用户名 * * @param ftpPassword SFTP用户名密码 * * @param ftpPort SFTP端口 * * @param ftpPath SFTP服务器中文件所在路径 格式: ftptest/aa * * @param localPath 下载到本地的位置 格式:H:/download * * @param fileName 文件名称 */ public static void downloadSftpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String localPath, String fileName) throws JSchException { Session session = null; Channel channel = null; JSch jsch = new JSch(); session = jsch.getSession(ftpUserName, ftpHost, ftpPort); session.setPassword(ftpPassword); session.setTimeout(100000); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); channel = session.openChannel("sftp"); channel.connect(); ChannelSftp chSftp = (ChannelSftp) channel; String ftpFilePath = ftpPath + "/" + fileName; String localFilePath = localPath + File.separatorChar + fileName; try { chSftp.get(ftpFilePath, localFilePath); } catch (Exception e) { e.printStackTrace(); } finally { chSftp.quit(); channel.disconnect(); session.disconnect(); } } }
执行命令或者sell脚本
package com.sinosun;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.nio.charset.Charset;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelExec;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session;public class JSchDemo { private String charset = "UTF-8"; // 设置编码格式 private String user; // 用户名 private String passwd; // 登录密码 private String host; // 主机IP private JSch jsch; private Session session; /** * * @param user用户名 * @param passwd密码 * @param host主机IP */ public JSchDemo(String user, String passwd, String host) { this.user = user; this.passwd = passwd; this.host = host; } /** * 连接到指定的IP * * @throws JSchException */ public void connect() throws JSchException { jsch = new JSch(); session = jsch.getSession(user, host, 22); session.setPassword(passwd); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); } /** * 执行相关的命令 */ public void execCmd() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //String command = "ls ;rm -f aa.log; ls "; //String command = "tar -czf aa.tar.gz aa.log"; //String command = "tar -zxvf aa.tar.gz"; //String command = "tar -zxvf aa.tar.gz"; //String command = "/root/test.sh"; //String command = "reboot"; //String command = "echo abc >> xx.txt"; String command = "ls -al"; //String command = "echo \"always\" >/sys/kernel/mm/transparent_hugepage/enabled "; BufferedReader reader = null; Channel channel = null; try { channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(System.err); channel.connect(); InputStream in = channel.getInputStream(); reader = new BufferedReader(new InputStreamReader(in, Charset.forName(charset))); String buf = null; while ((buf = reader.readLine()) != null) { System.out.println(buf); } } catch (IOException e) { e.printStackTrace(); } catch (JSchException e) { e.printStackTrace(); } finally { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } channel.disconnect(); session.disconnect(); } } public static void main(String[] args) throws Exception { String user = "root"; String passwd = "123456"; String host = "192.168.238.129"; JSchDemo demo = new JSchDemo(user, passwd, host); demo.connect(); demo.execCmd(); }}
jsch的封装sshxcute
sshxcute是对jsch的封装,目前 JSch 正是这样一个满足上述基本需求的类库,JSch 是 SSH2 的一个纯 Java 实现。它可以连接到一个 sshd 服务器,使用端口转发,X11 转发,文件传输等等。但是这个类库毕竟偏向底层,上手与实际运行起来不太方便,sshxcute 框架正是基于 JSch 封装的,提供了更为便捷的 API 借口,更加灵活实用的功能,从而可以让开发与测试人员更加得心应手的使用。sshxcute 是一个框架,它允许工程师利用 Java 代码通过 SSH 连接远程执行 Linux/UNIX 系统上的命令或者脚本,这种方式不管是针对软件测试还是系统部署,都简化了自动化测试与系统环境部署的步骤。
面向 Java 开发与测试人员的远程执行 Linux/UNIX 系统上任务的框架 – sshxcute
1 0
- Jsch学习
- JSch
- JSch
- JSch
- JSch
- JSch
- JSch
- JSch
- JSch
- JSch
- JSch
- Jsch学习笔记(一):Session和线程
- jsch example
- Jsch 深入浅出
- jsch初步
- jsch记录
- JSCH专题
- jsch教程
- webpack入门+react环境配置
- 数组法求C++大数的序列和
- Android Studio 更新第三方.so
- 红蓝牌
- 奇怪的比赛,蓝桥杯2012年第4题
- Jsch学习
- Banner 统计
- [构造] Codeforces 618F Wunder Fund Round 2016 F. Double Knapsack
- 蓝桥杯第五届省赛C/C++A组第五题 锦标赛
- 快速实现python c扩展模块
- kubernetes calico网络qos设计
- 向后兼容--对象检测
- hdu 4508 湫湫系列故事——减肥记I (最简单的完全背包)
- 蓝桥杯——网络寻路(dfs)