`
tom_seed
  • 浏览: 322111 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java之基于jsch连接sftp

 
阅读更多

       当系统与系统之间的通信需要大文件共享数据,并且是远程的关系,很多时候都会用到安全的文件传输协议SFTP。

       到目前为止,碰到了两种关于SFTP的链接方式:

  • 基于用户名密码的方式连接SFTP;
  • 基于密匙的方式连接SFTP(可以无密码登陆);

        两种的主要区别在于后者需要有SFTP服务器的密匙文件、以专网IP(SFTP服务端只允许报备过的IP访问)开放的形式获取文件,这样的安全性应该更高些。

 

以下是基于jsch的两种连接方式:

/** 用户名密码的方式连接SFTP
 * @param host
 * @param port
 * @param username
 * @param password
 * @return
 */
public ChannelSftp connect(String host, int port, String username, String password) throws JSchException{
	ChannelSftp csftp = null;
	JSch jsch = new JSch();
	Session sshSession = jsch.getSession(username, host, port);

	sshSession.setPassword(password);
	Properties sshConfig = new Properties();
	sshConfig.put("StrictHostKeyChecking", "no");
	sshSession.setConfig(sshConfig);
	sshSession.connect();//可设置超时时间

	Channel channel = sshSession.openChannel("sftp");
	channel.connect();//可设置超时时间

	csftp = (ChannelSftp)channel;
	return csftp;
}

/**
 * 支持密钥的方式登陆
 * @param ip
 * @param username
 * @param password 非必须
 * @param port
 * @param privateKey 必须,由远程SFTP服务器生成提供并存放在客户端服务器上
 * @param passphrase 非必须
 */
public ChannelSftp connectWithKey(String ip, String username, String password, int port, String privateKey, String passphrase) throws Exception{
	JSch jsch = new JSch();
	if (privateKey != null && !"".equals(privateKey)) {//设置密钥和密码
		if (passphrase != null && "".equals(passphrase)) {//设置带口令的密钥
			jsch.addIdentity(privateKey, passphrase);
		} else {
			jsch.addIdentity(privateKey);//设置不带口令的密钥
		}
	}

	Session session = null;
	if(port <=0){//连接服务器,采用默认端口
		session = jsch.getSession(username, ip);
	}else{//采用指定的端口连接服务器
		session = jsch.getSession(username, ip ,port);
	}
	if (session == null) {//如果服务器连接不上,则抛出异常
		throw new Exception("session is null");
	}
	if(StringUtils.isNotBlank(password))//密码不为空则设置密码
		session.setPassword(password);

	Properties sshConfig = new Properties();
	sshConfig.put("StrictHostKeyChecking", "no");//设置第一次登陆的时候提示,可选值:(ask | yes | no)
	session.setConfig(sshConfig);
	session.connect();//设置登陆超时时间
	Channel channel = (Channel)session.openChannel("sftp");//创建sftp通信通道
	channel.connect();
	ChannelSftp sftp = (ChannelSftp)channel;
	return sftp;
}

/**
 * 密钥方式调用示例
 * 其中"/usr/local/.ssh/xxx_remote_rsa"为SFTP服务器生成并提供给调用客户端服务器,并存放在客户端服务器上
 * @return
 * @throws SftpException 
 */
public void doVisit(){
	try{
		ChannelSftp sftp = ftp.connectWithKey(host, username, null, port, "/usr/local/.ssh/xxx_remote_rsa",null);//支持密钥的方式登陆
	}catch(Exception e){
		e.printStackTrace();
	}
}

 

分享到:
评论

相关推荐

    详解Java使用Jsch与sftp服务器实现ssh免密登录

    4. 在Java中,通过JSch库连接到SFTP服务器时,需要先建立一个JSch对象,然后创建一个Session(会话),并设置Session的配置属性。 5. 接着通过Session对象获取一个Channel(通道),并打开SFTP通道。此时可以利用...

    java操作sftp的工具类(JSch)

    JSch是一个纯Java实现的SSH2库,允许开发人员连接到支持SFTP的服务器,进行文件的上传、下载以及执行其他相关操作。本文将详细介绍如何使用JSch进行SFTP操作,并提供一个简单的`SftpUtil`工具类示例。 首先,我们...

    java实现ftp、sftp的文件上传和下载

    Java中可以使用JSch库来实现SFTP操作。JSch是一个纯Java实现的SSH2库,支持SFTP。使用JSch时,需要先建立SSH连接,然后打开一个SFTP会话。文件操作的接口封装在`ChannelSftp`类中。示例代码如下: ```java JSch ...

    连接sftp服务器

    下面我们将详细讲解如何使用Java连接SFTP服务器以及下载文件。 首先,我们需要一个Java库来处理SFTP连接。常用的是JSch(Java Secure Channel),这是一个开源的SSH2库,支持SFTP。要使用JSch,你需要将其添加到你...

    java版SFTP实现示例(使用jsch)

    在Java中,我们通常会使用第三方库如JSch来实现SFTP功能。 JSch(Java Secure Channel)是一个开源Java库,它允许开发者执行SSH2协议,包括SFTP。通过JSch,我们可以实现连接到远程服务器,创建、上传、下载、删除...

    java SFTP上传所需jar和秘钥工具

    Java SFTP上传涉及的技术栈主要围绕Java Secure Channel (JSch) 库,Java Cryptography Extension (JCE) 政策,以及PuTTY工具。这些组件在实现安全的文件传输协议(SFTP)时扮演着关键角色。 首先,让我们深入了解每...

    SFTP連接所用到的jsch.jar包

    JSch是Java Secure Channel的一个开源实现,它提供了一个方便的API来连接SSH2协议(SFTP是基于SSH2的子协议)的服务器。 JSch库的核心功能包括: 1. **建立SFTP连接**:JSch库允许开发者通过提供主机名、端口号、...

    基于Java的实例源码-用Java写的SFTP代码.zip

    2. **连接SFTP服务器**:使用JSch,首先需要创建一个`JSch`对象,然后通过`Session`类建立到SFTP服务器的连接。这通常涉及设置主机名、端口、用户名和密码(或私钥)。 3. **身份验证**:JSch支持多种身份验证方式...

    jsch-0.1.42.jar及用java实现SFTP的例子

    **JSch库详解** ...以上代码展示了如何使用JSch库进行基本的SFTP操作,包括连接、列出目录、上传和下载文件。在实际应用中,你可能需要处理异常,优化性能,并考虑更多高级特性,如断点续传、多线程传输等。

    java sftp文件上传

    以上就是使用Java和JSch库进行SFTP文件上传的基本步骤和注意事项。在实际应用中,你可能还需要根据具体需求进行调整,例如处理异常、优化性能等。记得在生产环境中,始终确保数据安全和传输可靠性。

    基于SSH协议的sftp协议

    该示例代码中,定义了一个SFTPTool类,提供了连接SFTP服务器、上传和下载文件等功能。该类使用JSch库来实现SFTP协议的连接和文件传输,提供了一个基本的SFTP客户端实现。 SFTP协议的主要特点包括: * 安全性:SFTP...

    jsch-0.1.55,包含jar和source

    5. **打开SFTP通道**:通过`openChannel("sftp")`创建一个SFTP通道,并使用`connect`方法连接SFTP服务。 6. **执行SFTP操作**:如上传文件、下载文件、列出目录等,这可以通过`ChannelSftp`对象的方法实现。 7. **...

    基于Java的用Java写的SFTP代码.zip

    本资源"基于Java的用Java写的SFTP代码.zip"包含了使用Java实现SFTP文件传输功能的代码示例。 Java中实现SFTP通常会用到JSch(Java Secure Channel)库,这是一个开源项目,提供了SSH2协议的支持,包括SFTP。JSch库...

    基于java的用java写的SFTP代码.zip

    2. **连接SFTP服务器**: 要连接到SFTP服务器,你需要提供主机名、用户名、密码或私钥信息。以下是一个基本的连接示例: ```java JSch jsch = new JSch(); Session session = jsch.getSession("username", ...

    JSch - Java实现的SFTP(文件上传/下载详解篇)

    JSch,全称为Java Secure Channel,是一个开源的Java库,用于实现SSH2协议,包括Secure File Transfer Protocol(SFTP)。SFTP是一种在不安全网络上安全传输文件的协议,它基于SSH2,提供了数据加密和身份验证功能。...

    SFTP下载(JSch可跨服务器)

    总的来说,"SFTP下载(JSch可跨服务器)"涉及的主要知识点包括SFTP协议的使用、JSch库的功能、SSH连接的建立与管理、SFTP会话的创建与操作,以及Java中的文件I/O。通过JSch,开发人员可以方便地在Java应用中实现安全...

    Java版的并行分布式SSH客户端,基于jsch实现。可并行或串行在多台服务器上执行指令,上传或下载文件。.zip

    这个客户端基于JSch库,一个强大的Java实现的SSH2库,提供了对SSH协议的支持,包括连接、身份验证、SFTP文件传输等功能。在本文中,我们将深入探讨JSch库的使用,以及如何构建一个并行或串行执行命令、上传和下载...

    SFTP资料及JAR包

    SFTP(Secure File Transfer Protocol)是一种基于SSH2协议的安全文件传输协议,用于在不同网络之间安全地传输文件。它确保了数据的完整性,通过加密连接防止未经授权的访问和窃听。在Java中,我们可以利用开源库...

Global site tag (gtag.js) - Google Analytics