Jsch初步 Java SFTP协议 实现
2016-12-01 11:52
896 查看
1.去官网下载最新的jar包
jsch-0.1.51.jar
2.运行官方例子
Shell.java
演示了如何连接到sshd服务器
Exec.java
演示了登陆上去并执行一条命令
注意以上2个例子让你输入密码同样也是输入cyg_server用户的密码
运行成功后可以看下它的代码。
3.再做一个SFTP试验
Java代码
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-0.1.51.jar
2.运行官方例子
Shell.java
演示了如何连接到sshd服务器
Exec.java
演示了登陆上去并执行一条命令
注意以上2个例子让你输入密码同样也是输入cyg_server用户的密码
运行成功后可以看下它的代码。
3.再做一个SFTP试验
Java代码
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使用之Java实现ssh sftp协议传输
- jsch java实现sftp文件上传下载
- java在线支付---09,10,11,12_在线支付_分析易宝支付网关的应答协议与处理代码,完成用于处理支付响应的Servlet的初步编写和调试,完成处理支付网关响应结果的Servlet,支付实现
- JSch - Java实现的SFTP(文件下载详解篇)
- JSch____Java实现SFTP文件上传下载…
- JSch - Java实现的SFTP(文件上传详解篇)
- JSch - Java实现的SFTP
- JSch - Java实现的SFTP(文件上传详解篇)
- JSch - Java实现的SFTP(文件上传详解篇)
- 【转】JSch - Java实现的SFTP(文件上传详解篇)
- JSch - Java实现的SFTP(文件上传详解篇) [转载]
- JSch - Java实现的SFTP(文件下载详解篇)
- JSch - Java实现的SFTP(文件下载详解篇
- JSch - Java实现的SFTP(文件下载详解篇)
- JSch - Java实现的SFTP(文件下载详解篇)
- JSch - Java实现的SFTP(文件上传详解篇)
- JSch - Java实现的SFTP(文件上传详解篇)
- JSch - Java实现的SFTP(文件下载详解篇)
- JSch - Java实现的SFTP(文件上传详解篇)(转)
- JSch - Java实现的SFTP(文件上传详解篇)