当系统与系统之间的通信需要大文件共享数据,并且是远程的关系,很多时候都会用到安全的文件传输协议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(); } }
相关推荐
4. 在Java中,通过JSch库连接到SFTP服务器时,需要先建立一个JSch对象,然后创建一个Session(会话),并设置Session的配置属性。 5. 接着通过Session对象获取一个Channel(通道),并打开SFTP通道。此时可以利用...
JSch是一个纯Java实现的SSH2库,允许开发人员连接到支持SFTP的服务器,进行文件的上传、下载以及执行其他相关操作。本文将详细介绍如何使用JSch进行SFTP操作,并提供一个简单的`SftpUtil`工具类示例。 首先,我们...
Java中可以使用JSch库来实现SFTP操作。JSch是一个纯Java实现的SSH2库,支持SFTP。使用JSch时,需要先建立SSH连接,然后打开一个SFTP会话。文件操作的接口封装在`ChannelSftp`类中。示例代码如下: ```java JSch ...
下面我们将详细讲解如何使用Java连接SFTP服务器以及下载文件。 首先,我们需要一个Java库来处理SFTP连接。常用的是JSch(Java Secure Channel),这是一个开源的SSH2库,支持SFTP。要使用JSch,你需要将其添加到你...
在Java中,我们通常会使用第三方库如JSch来实现SFTP功能。 JSch(Java Secure Channel)是一个开源Java库,它允许开发者执行SSH2协议,包括SFTP。通过JSch,我们可以实现连接到远程服务器,创建、上传、下载、删除...
Java SFTP上传涉及的技术栈主要围绕Java Secure Channel (JSch) 库,Java Cryptography Extension (JCE) 政策,以及PuTTY工具。这些组件在实现安全的文件传输协议(SFTP)时扮演着关键角色。 首先,让我们深入了解每...
JSch是Java Secure Channel的一个开源实现,它提供了一个方便的API来连接SSH2协议(SFTP是基于SSH2的子协议)的服务器。 JSch库的核心功能包括: 1. **建立SFTP连接**:JSch库允许开发者通过提供主机名、端口号、...
2. **连接SFTP服务器**:使用JSch,首先需要创建一个`JSch`对象,然后通过`Session`类建立到SFTP服务器的连接。这通常涉及设置主机名、端口、用户名和密码(或私钥)。 3. **身份验证**:JSch支持多种身份验证方式...
**JSch库详解** ...以上代码展示了如何使用JSch库进行基本的SFTP操作,包括连接、列出目录、上传和下载文件。在实际应用中,你可能需要处理异常,优化性能,并考虑更多高级特性,如断点续传、多线程传输等。
以上就是使用Java和JSch库进行SFTP文件上传的基本步骤和注意事项。在实际应用中,你可能还需要根据具体需求进行调整,例如处理异常、优化性能等。记得在生产环境中,始终确保数据安全和传输可靠性。
该示例代码中,定义了一个SFTPTool类,提供了连接SFTP服务器、上传和下载文件等功能。该类使用JSch库来实现SFTP协议的连接和文件传输,提供了一个基本的SFTP客户端实现。 SFTP协议的主要特点包括: * 安全性:SFTP...
5. **打开SFTP通道**:通过`openChannel("sftp")`创建一个SFTP通道,并使用`connect`方法连接SFTP服务。 6. **执行SFTP操作**:如上传文件、下载文件、列出目录等,这可以通过`ChannelSftp`对象的方法实现。 7. **...
本资源"基于Java的用Java写的SFTP代码.zip"包含了使用Java实现SFTP文件传输功能的代码示例。 Java中实现SFTP通常会用到JSch(Java Secure Channel)库,这是一个开源项目,提供了SSH2协议的支持,包括SFTP。JSch库...
2. **连接SFTP服务器**: 要连接到SFTP服务器,你需要提供主机名、用户名、密码或私钥信息。以下是一个基本的连接示例: ```java JSch jsch = new JSch(); Session session = jsch.getSession("username", ...
JSch,全称为Java Secure Channel,是一个开源的Java库,用于实现SSH2协议,包括Secure File Transfer Protocol(SFTP)。SFTP是一种在不安全网络上安全传输文件的协议,它基于SSH2,提供了数据加密和身份验证功能。...
总的来说,"SFTP下载(JSch可跨服务器)"涉及的主要知识点包括SFTP协议的使用、JSch库的功能、SSH连接的建立与管理、SFTP会话的创建与操作,以及Java中的文件I/O。通过JSch,开发人员可以方便地在Java应用中实现安全...
这个客户端基于JSch库,一个强大的Java实现的SSH2库,提供了对SSH协议的支持,包括连接、身份验证、SFTP文件传输等功能。在本文中,我们将深入探讨JSch库的使用,以及如何构建一个并行或串行执行命令、上传和下载...
SFTP(Secure File Transfer Protocol)是一种基于SSH2协议的安全文件传输协议,用于在不同网络之间安全地传输文件。它确保了数据的完整性,通过加密连接防止未经授权的访问和窃听。在Java中,我们可以利用开源库...