java sftp_JAVA 实现SFTP服务器功能

本文介绍如何利用Apache MINA库构建一个自定义的SFTP服务器,以满足项目中加密文件上传的需求。通过设置工厂方法,配置端口、密钥对提供者、子系统工厂和命令工厂,实现了简单的SSH服务。服务器使用了`SftpSubsystem`来处理SFTP请求,并自定义了`PasswordAuthenticator`进行用户验证。虽然目前不支持中文解码,但该方案已在Linux环境下成功运行。
摘要由CSDN通过智能技术生成

由于项目需要加密上传文件,使用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服务器上不存在中文问题,唯一缺点就是暂时不支持中文解码,后续在研究。

4356513857c9e67d3c9e30bbcf3819ca.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值