在网上搜索java搭建SFTP服务器,能搜到各种各样的。真正有用的一个没有,所以我想自己写一份。废话不多说。
1.添加maven依赖
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-sftp</artifactId>
<version>2.4.0</version>
</dependency>
2.主要代码
public class SftpServer {
public static void main(String[] args) {
//创建SshServer对象
SshServer sshd = SshServer.setUpDefaultServer();
//配置端口
sshd.setPort(2222);
//设置默认的签名文件,如果文件不存在会创建
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(Paths.get("/Users/didi/Downloads/key")));
sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
@Override
public boolean authenticate(String username, String password, ServerSession session) throws PasswordChangeRequiredException, AsyncAuthException {
//假定用户名:usera, 密码:passa
return "usera".equals(username) && "passa".equals(password);
}
});
//设置sftp子系统
sshd.setSubsystemFactories(Arrays.<SubsystemFactory>asList(new SftpSubsystemFactory()));
//设置sftp默认的访问目录
Path dir = Paths.get("/Users/didi/Downloads/image_train");
sshd.setFileSystemFactory(new VirtualFileSystemFactory(dir.toAbsolutePath()));
//设置ssh的shell环境
sshd.setShellFactory(InteractiveProcessShellFactory.INSTANCE);
//启动ssh服务
try{
sshd.start();
}catch (Exception e){
e.printStackTrace();
}
//保持java进程不关闭
//这个很重要
Object obj = new Object();
synchronized (obj){
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
这样服务端就启动了。客户端可以使用FileZilla进行访问。