Windows搭建SFTP文件服务器

自己搭建一个SFTP文件服务器,来实现不同IP服务器之间文件的传输;
应用的场景:由于需要缓解服务器的压力,需要对服务进分离,分别放置在不同IP服务器上;
首先提供一个SFTP的工具,FreeSSHd,这个软件可以自行下载,安装的过程也是傻瓜式的,并没有什么可以说的至于对于服务器的配置,提醒以下几点:

1。默认是22端口,一般来说这个端口会被占用,所以我自己勾选的是23端口(红色框不勾选,如果勾选的话,并且之前选择作为一个系统服务的话,会创建另外一个实例,自己还是会以为是原来的那个服务器,结果导致实例创建不起来,最好把IP地址选上!!!)
2.创建一个自己的用户,
3.公用秘钥的勾选:
4.创建文件服务器默认的服务地址,可以进行勾选
5.其他的保持默认即可,记得要点击启动ssh服务!!!
6.提供一个连接服务器的工具类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Vector; import org.apache.log4j.Logger; import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
import com.jcraft.jsch.ChannelSftp.LsEntry; public class SFTPUtils {private static Logger log = Logger.getLogger(SFTPUtils.class.getName()); private String host;//服务器连接ip private String username;//用户名 private String password;//密码 private int port = 22;//端口号 private static ChannelSftp sftp = null; private Session sshSession = null; public SFTPUtils(){} public SFTPUtils(String host, int port, String username, String password) { this.host = host; this.username = username; this.password = password; this.port = port; }/*** 通过SFTP连接服务器*/ public void connect() { try { JSch jsch = new JSch(); jsch.getSession(username, host, port); sshSession = jsch.getSession(username, host, port); if (log.isInfoEnabled()) { log.info("Session created."); } sshSession.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); if (log.isInfoEnabled()) { log.info("Session connected."); } Channel channel = sshSession.openChannel("sftp"); channel.connect(); if (log.isInfoEnabled()) { log.info("Opening Channel."); } sftp = (ChannelSftp) channel; if (log.isInfoEnabled()) { log.info("Connected to " + host + "."); } } catch (Exception e) { e.printStackTrace(); } } /*** 关闭连接*/ public void disconnect() { if (this.sftp != null) { if (this.sftp.isConnected()) { this.sftp.disconnect(); if (log.isInfoEnabled()) { log.info("sftp is closed already"); } } } if (this.sshSession != null) { if (this.sshSession.isConnected()) { this.sshSession.disconnect(); if (log.isInfoEnabled()) { log.info("sshSession is closed already"); } } } } /*** 上传单个文件* @param remotePath:远程保存目录* @param remoteFileName:保存文件名* @param localPath:本地上传目录(以路径符号结束)* @param localFileName:上传的文件名* @return*/ public boolean uploadFile(String remotePath, String remoteFileName,String localPath, String localFileName) { FileInputStream in = null; try { createDir(remotePath); File file = new File(localPath + localFileName); in = new FileInputStream(file); sftp.put(in, remoteFileName); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SftpException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return false; } /*** 创建目录* @param createpath* @return*/ public boolean createDir(String createpath) { try { if (isDirExist(createpath)) { sftp.cd(createpath); return true; } String pathArry[] = createpath.split("/"); StringBuffer filePath = new StringBuffer("/"); for (String path : pathArry) { if (path.equals("")) { continue; } filePath.append(path + "/"); if (isDirExist(filePath.toString())) { sftp.cd(filePath.toString()); } else { // 建立目录 sftp.mkdir(filePath.toString()); // 进入并设置为当前目录 sftp.cd(filePath.toString()); } } sftp.cd(createpath); return true; } catch (SftpException e) { e.printStackTrace(); } return false; } /*** 判断目录是否存在* @param directory* @return*/ public boolean isDirExist(String directory) { boolean isDirExistFlag = false; try { SftpATTRS sftpATTRS = sftp.lstat(directory); isDirExistFlag = true; return sftpATTRS.isDir(); } catch (Exception e) { if (e.getMessage().toLowerCase().equals("no such file")) { isDirExistFlag = false; } } return isDirExistFlag; }

7.测试连接是否异常,这里说明一下参数的问题创建文件服务器的连接时,参数依次为IP,端口,户名,密码,就是之前自己配置的那些信息上传文件的方法中:
第一个参数是相对与自己之前创建文件服务器的地址,如果没有,会自行对文件进行创建,
第二个参数是保存文件的名称,可以自行定义;
第三个参数是本地文件的路径,选择上传的文件会在这个地址下进行查找,如果配置错误,会报出文件不存在的错误;
第四个参数是本地文件在文件服务器地址下的名称,也就是上传文件的名称,如果没有这个文件的话,肯定会报错的哦;

public static void main(String[] args) { SFTPUtils sftp = null; try { sftp = new SFTPUtils("127.0.0.1",23,"shishi", "123456");//现在后台的SFTP的账户信息sftp.connect();// 下载 //boolean flag =  sftp.uploadFile("/test/", "201708081138_o7Lpot_9nrAvyz2dbLFbq7ftn374_ba89d4.jpg", "F:/", "201708081138_o7Lpot_9nrAvyz2dbLFbq7ftn374_ba89d4.jpg");  //上传文件//System.out.println(flag);} catch (Exception e) { e.printStackTrace(); } finally { sftp.disconnect(); } }

8.如果出现端口占用或者IP被占用,需要进行对端口所对应的任务杀死,或者是之前说的服务已成为系统服务,早就有一个实例(查看任务管理器还看不出来)

Windows搭建SFTP文件服务器相关推荐

  1. Windows本地快速搭建SFTP文件服务器,并端口映射实现公网远程访问

    文章目录 1. 搭建SFTP服务器 1.1 下载 freesshd服务器软件 1.3 启动SFTP服务 1.4 添加用户 1.5 保存所有配置 2 安装SFTP客户端FileZilla测试 2.1 配 ...

  2. windows搭建SFTP服务器

    sftp在linux上面搭建是很简单的,但是windows上面因为都是用ftp比如自带的ftp和filezila都是ftp但是我们需要的是sftp,所以无法满足.查了一下用freeSSHd是可以的: ...

  3. liunx搭建sftp文件服务器,Centos7搭建sftp服务器

    当ssh连接linux服务器的时候传送文件很麻烦,但是用sftp就方便多了,系统有的是默认带有sftp服务的,但是有时候会存在问题导致不能使用,这时需要重新注册服务,以下步骤仅供参考. 一.创建sft ...

  4. Windows系统中搭建nginx文件服务器

    如何在Windows系统中搭建nginx文件服务器 文件路径 E:\file\pcc_bbs_files 下载安装包:http://nginx.org/download/nginx-1.9.15.zi ...

  5. Windows server 2008、2012、2016搭建sftp服务(超级简单)

    Windows server 2008.2012.2016搭建sftp服务(超级简单) 原创 及时雨丶 最后发布于2019-11-13 06:26:38 阅读数 194 收藏 发布于2019-11-1 ...

  6. Windows本地快速搭建SFTP服务共享文件【外网访问】

    文章目录 1. 搭建SFTP服务器 1.1 下载 freesshd服务器软件 1.3 启动SFTP服务 1.4 添加用户 1.5 保存所有配置 2 安装SFTP客户端FileZilla测试 2.1 配 ...

  7. Windows本地快速搭建SFTP服务共享文件 - 外网访问【端口映射】

    文章目录 1. 搭建SFTP服务器 1.1 下载 freesshd服务器软件 1.3 启动SFTP服务 1.4 添加用户 1.5 保存所有配置 2 安装SFTP客户端FileZilla测试 2.1 配 ...

  8. vps文件服务器,vps搭建媒体文件服务器

    vps搭建媒体文件服务器 内容精选 换一换 在高可用部署场景下需要创建SFS Turbo提供文件共享功能.请参考表1在公有云平台创建SFS Turbo. 域名认证时,需要将下载的认证文件上传到网站根目 ...

  9. 局域网内搭建SFTP服务器及多用户管理

    局域网内搭建SFTP服务器及多用户管理 前言 软硬件设置 服务器--树莓派3B 操作系统--Raspbian 客户端--Filezilla 用户管理 常用用户管理命令 常见用户组命令 文件权限 SSH ...

最新文章

  1. 异步发送邮件、短信、微信
  2. java开发用amd处理器_HBase1.x实战:协处理器Java开发实例--ObserverCoprocessor
  3. WebService的事务处理 (转)
  4. c#listView
  5. poj3666(DP+离散化)
  6. shell去掉字符两端字符_Shell脚本8种字符串截取方法总结
  7. Linux文件系统层次结构
  8. 在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)
  9. 手机APP移动应用开发
  10. HTML实现简单注册页面
  11. Windows系统安装Mysql前运行库依赖
  12. excel 电阻并联计算_25套电气计算软件加24个电气计算表格,从此电气计算不求人!...
  13. 如何把python代码翻译成中文-Python:谷歌翻译20次的程序如何实现?
  14. 出口美国的电动自行车UL2849测试和GCC检测标准
  15. matlab多重比较lsd法,多重比较法-LSD I 附赠统计学最全思维导图~
  16. Sat Sep 25 07:38:46 Local time zone must be set--see zic manual page 2021
  17. 居家办公的团队协作模式改进思考
  18. springboot 启动 ApplicationContext applicationContext = null
  19. 06-01 DeepLearning-图像识别
  20. 英语名篇——关于《论学习》的读后感

热门文章

  1. 还在用电脑多控手机?你out了,手机多控手机,全新神器
  2. 媒体播控系统、信息发布系统 使用说明
  3. js怎么实现hmacsha256_各种语言HMAC SHA256实现
  4. Kindle2018 一周使用报告
  5. 加密世界“众生相”:僧侣、信徒和骗子
  6. VUE前端二级部门联动下拉菜单
  7. 万国觉醒国服服务器未响应,万国觉醒国服与国际服互通吗 数据互通问题解答...
  8. 服务器千兆网卡芯片,Intel 82574L and 82576 千兆网卡芯片区别.pdf
  9. 找最大数及下标 指针 c语言,c语言求数组中最大值和最小值及其下标
  10. mysql 中外码和主码_数据库原理与应用(6)——关系的候选码、主码和外码、关系完整性、关系代数、元组关系的演算、域关系演算...