由于项目需要加密上传文件,使用Linux系统自带的SFTP服务很不方便。因此需要自己实现一套SFTP服务。这里使用的是Apache的开源软件MINA实现的SSHD协议。具体网址如下:http://mina.apache.org/sshd-project/embedding_ssh.html

需要引用一些Apache的开源架包,

服务器段具体实现如下

package com.song.SftpServer;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import org.apache.sshd.SshServer;

import org.apache.sshd.client.UserAuth;

import org.apache.sshd.common.NamedFactory;

import org.apache.sshd.common.keyprovider.FileKeyPairProvider;

import org.apache.sshd.server.Command;

import org.apache.sshd.server.PasswordAuthenticator;

import org.apache.sshd.server.auth.UserAuthNone;

import org.apache.sshd.server.command.ScpCommandFactory;

import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;

import org.apache.sshd.server.sftp.SftpSubsystem;

import org.apache.sshd.server.shell.ProcessShellFactory;

public class SftpServer {

public static void main(String[] args)

{

// 工厂方法,使用默认属性创建ssh服务对象

SshServer sshd = SshServer.setUpDefaultServer();

sshd.setPort(4444);

String stest = "F:\\MyEclipse\\SFTPServer\\key.pem";

String []sKyepPath={stest};

// 保存会话安全校验信息,key.pem和key.ser为文件名

sshd.setKeyPairProvider(new FileKeyPairProvider(sKyepPath));

List> namedFactoryList = new ArrayList>();

namedFactoryList.add(new SftpSubsystem.Factory());

sshd.setSubsystemFactories(namedFactoryList);

sshd.setCommandFactory(new ScpCommandFactory());

sshd.setShellFactory(new ProcessShellFactory());

sshd.setPasswordAuthenticator(new Authcator());

try {

sshd.start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

认证类package com.song.SftpServer;

import org.apache.sshd.server.PasswordAuthenticator;

import org.apache.sshd.server.session.ServerSession;

public class Authcator implements PasswordAuthenticator {

@Override

public boolean authenticate(String arg0, String arg1, ServerSession arg2) {

// TODO Auto-generated method stub

if(arg0.endsWith("song")&&arg1.endsWith("song"))

{

return true;

}

else

{

return false;

}

}

}

实现如下,使用FileZile可以成功连接服务器。在Linux服务器上不存在中文问题,唯一缺点就是暂时不支持中文解码,后续在研究。

java sftp_JAVA 实现SFTP服务器功能相关推荐

  1. 在Java中使用SFTP传输文件

    1. 概述 在本教程中,我们将讨论如何在Java中使用SFTP从远程服务器上传和下载文件. 我们将使用三个不同的库:JSch.SSHJ 和 Apache Commons VFS来实现. 2. 使用 J ...

  2. java jsch api_详解Java使用Jsch与sftp服务器实现

    在实际项目中常会遇到需要连接服务器获取文件的场景,如账务系统需要通过连接行方的sftp服务器拉取回单文件.本文将主要讨论使用Java中的jsch与sftp服务器实现ssh免密连接. 一.什么是SFTP ...

  3. Java从sftp服务器上传与下载文件

    一.背景 业务需要从sftp服务器上上传.下载.删除文件等功能,通过查阅资料及手动敲打代码,实现了操作sftp的基本功能,有需求的小伙伴可以看看具体的实现过程. 二.sftp介绍 摘自百度百科:SSH ...

  4. Java从SFTP服务器下载文件一

    最近对接一个需求,要用SFTP去服务器上取文件,这里记录下自己的思路. SFTP下载文件需要用到jsch的jar包,我用的是jsch-0.1.54.jar,可以到http://www.jcraft.c ...

  5. java ftp服务器_Java实现FTP服务器功能实例代码

    FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Downl ...

  6. java获得sftp目录_Java代码获取SFTP服务器文件

    1 /** 2 *@authorshansm3 * @date 2020/3/18 -17:274 */ 5 public classSFTPUtil {6 7 private transient L ...

  7. channelsftp的put_JSch - Java实现的SFTP(文件上传详解篇)

    public void put(String src, String dst) 将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同. 采用 ...

  8. JSCH通过密码和公钥连接SFTP服务器的指纹判断以及Serv-U设置公钥登录

    文章目录 (零)背景 (一)主机指纹 1.1 现象和原理 1.2 解决方法 1.2.1手动ssh 1.2.2 执行ssh-keyscan 1.2.3 程序用公钥登录 1.3 指纹变化 (二)JSCH程 ...

  9. Linux搭建ftp和sftp服务器

    前言 FTP FTP(File Transfer Protocol,文件传输协议)是 TCP/IP 协议组中的协议之一,一般是为了方便数据共享的.FTP 包括一个 FTP 服务器和多个 FTP 客户端 ...

最新文章

  1. java jtable 单元格合并_JTable 单元格合并 【转】
  2. 如何使用Proxy模式及Java内建的动态代理机制
  3. 使用Packet.dll和npf.sys实现原始数据包的发送和接收
  4. esp8266环境搭建
  5. ssl初一组周六模拟赛【2018.4.14】
  6. HTML5教程之-文件拖拽功能实现
  7. k8s一个容器多个镜像_从零开始学K8s: 6.运行一个简单的容器
  8. 2021数学建模E题
  9. osm地图数据 mysql_GIS 地图数据的来源?
  10. 人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包
  11. 日志技术之JUL入门
  12. win10文件夹加密_专业的文件隐藏软件——文件夹隐藏精灵PC软件
  13. 如何设置Ubuntu键盘输入法框架为fcitx
  14. 奇数位升序偶数位降序的链表进行排序
  15. 推荐一个免费下载简历模板的网站
  16. 护士副高需要计算机考试吗,护士评副高什么要求
  17. 场效应管 - MOSFET
  18. 调取创蓝253国际短信验证码-代码示例2
  19. java字符串==_Java字符串(String)
  20. 火爆的人工智能项目都在这里了|Gitee项目推荐

热门文章

  1. 剑指offer——面试题34:丑数
  2. Leetcode 538.二叉树转换为累加树
  3. pytorch: torch.nn.functional.affine_grid(theta,size)
  4. 怎么解决vs2017一把鼠标放在Mat类上就卡死的问题
  5. phpstrom常用配置
  6. 海思uboot启动流程详细分析(二)
  7. 装饰器补充、三元表达式、生成式、匿名函数
  8. python之路第一天
  9. Linux格式化分区报错Could not start /dev/sda No such file or directory 解决办法
  10. 没关系,因为你是好人呀