Jsch初步
[From] http://xpenxpen.iteye.com/blog/2061869
上一篇文章我们成功搭建了sshd服务器,并通过3种方式登陆上了ssh。这一篇我们将用开源jar包jsch来登陆ssh服务器。
1.去官网下载最新的jar包
jsch-0.1.51.jar
2.运行官方例子
Shell.java
演示了如何连接到sshd服务器
Exec.java
演示了登陆上去并执行一条命令
注意以上2个例子让你输入密码同样也是输入cyg_server用户的密码
运行成功后可以看下它的代码。
3.再做一个SFTP试验
- import java.io.*;
- import java.util.*;
- import com.jcraft.jsch.*;
- public class Test1 {
- public static void main(String[] args) throws Exception {
- Test1.sshSftp("127.0.0.1", "Administrator", "cyg_server", 22);
- Test1.sshSftp2("127.0.0.1", "Administrator", 22, "C:/Users/Administrator/rsa_my", "");
- }
- /**
- * 利用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(session, "aa.log");
- System.out.println("sftp成功");
- }
- /**
- * 利用JSch包实现SFTP下载、上传文件(秘钥方式登陆)
- * @param ip 主机IP
- * @param user 主机登陆用户名
- * @param port 主机ssh2登陆端口,如果取默认值(默认值22),传-1
- * @param privateKey 密钥文件路径
- * @param passphrase 密钥的密码
- *
- */
- public static void sshSftp2(String ip, String user
- ,int port ,String privateKey ,String passphrase) throws Exception{
- System.out.println("开始秘钥方式登陆");
- Session session = null;
- JSch jsch = new JSch();
- //设置密钥和密码
- //支持密钥的方式登陆,只需在jsch.getSession之前设置一下密钥的相关信息就可以了
- if (privateKey != null && !"".equals(privateKey)) {
- if (passphrase != null && "".equals(passphrase)) {
- //设置带口令的密钥
- jsch.addIdentity(privateKey, passphrase);
- } else {
- //设置不带口令的密钥
- jsch.addIdentity(privateKey);
- }
- }
- if(port <=0){
- //连接服务器,采用默认端口
- session = jsch.getSession(user, ip);
- }else{
- //采用指定的端口连接服务器
- session = jsch.getSession(user, ip ,port);
- }
- //如果服务器连接不上,则抛出异常
- if (session == null) {
- throw new Exception("session is null");
- }
- //设置第一次登陆的时候提示,可选值:(ask | yes | no)
- session.setConfig("StrictHostKeyChecking", "no");
- //设置登陆超时时间
- session.connect(30000);
- sftp(session, "bb.log");
- System.out.println("sftp成功");
- }
- private static void sftp(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("testsftp");
- //列出服务器指定的文件列表
- Vector v = sftp.ls("*.txt");
- 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:/ftptest/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();
- }
- }
- }
代码是引用了http://my.oschina.net/hetiangui/blog/137357
首先这句sftp.ls("*.txt")是列出指定文件夹下所有txt文件,
然后sftp.put("3.txt")是上传一个文件到SFTP服务器上。
注意main函数里有2种登陆方式,
第一种是通过用户名Administrator,密码cyg_server的方式登陆。
第二种是通过秘钥方式登陆,我们的私钥目录是"C:/Users/Administrator/rsa_my",而passphrase则为空。
Jsch初步的更多相关文章
- 用jsch.jar实现SFTP上传下载删除
java类: 需要引用的jar: jsch-0.1.53.jar 关于jsch有篇文章关于目录的问题写得非常好:http://www.zzzyk.com/show/9f02969327434a6c.h ...
- 用jsch.jar实现SFTP上传下载删除【转】【补】
java类: 需要引用的jar: jsch-0.1.53.jar 关于jsch有篇文章关于目录的问题写得非常好:http://www.zzzyk.com/show/9f02969327434a6c.h ...
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- Android自定义View初步
经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...
- 初步认识Node 之Node为何物
很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了. Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...
随机推荐
- intval()函数
获取变量的整数值 1.转换前转化后 原因:
- URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)
题目链接 题意 : 给你n,e,c,并且知道me ≡ c (mod n),而且n = p*q,pq都为素数. 思路 : 这道题的确与题目名字很相符,是个RSA算法,目前地球上最重要的加密算法.RSA算 ...
- SurfaceView和SurfaceHolder的基本用法
仅做记录使用,新手也可以来看看,怎么得到一个surfaceholder. 1.在xml文件中增加一个surfaceView控件. <SurfaceView android:layout_widt ...
- PHP删除目录
function delDir($directory) { if(file_exists($directory)) { $dir_handle = @opendir($directory); if($ ...
- 在Linux环境下的卸载Oracle11G操作
1.使用SQL*PLUS停止数据库[oracle@OracleTest oracle]$ sqlplus /nolog SQL> connect / as sysdba SQL> shut ...
- 【02】循序渐进学 docker:如何安装
写在前面的话 我们接下来的操作都是 CentOS 7.5 以下完成的,为了避免你我结果不一致,建议你也采用 CentOS 7.5,原因如下: 1. 个人几年工作下来经历的公司,包括身边的运维朋友,90 ...
- C# 接口(2)
接口的实现方式. 接口的实现分两种: 1 显示实现接口 2 实现接口. 我们前面所得的接口的实现均为实现接口.也就是第二种方式.那么我们来来看第第一种实现方式: interface IHuman { ...
- Windows10电脑系统时间校准
有时候新安装电脑系统,系统时间不对,需要主动去校准系统时间. 1.点击时间 2.日期和时间设置 3.其他日期.时间和区域设置 4.设置时间和日期 5.Internet 时间 6.点击立即更新,如果更新 ...
- 为什么不应该重写service方法?
故事通常是这样开始的: 从前,有一个程序猿,他语重心长地对孙子说:“孩子,要是你以后写servlet,最好不要重写service方法啊” 孙子大为不解,程序猿又说:“听爷爷的,准没错,爷爷的爷爷就 ...
- 微信小程序HTTPS - cenos apache 下安装SSL证书
1.yum install mod_ssl 2.接下来,我们需要创建一个新目录,我们将存储服务器密钥和证书 mkdir /root/ssl 3.vi /etc/httpd/conf.d/ssl.con ...