sftp服务器 java实现_JAVA 实现SFTP服务器功能

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

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值