随着信息化、数字化的发展,企业对数据安全及应用安全意识普遍加强,在数据文件传输过程中,一般建议使用sftp协议进行文件传输,sftp文件操作脚本如下:

sftp操作主要有三种方式,分别是sftp客户端操作、sdk操作、操作系统命令操作,针对sdk方式。

一、sdk方式:

  1. <!-- sftp集成jar -->
  2. <dependency>
  3. <groupId>com.jcraft</groupId>
  4. <artifactId>jsch</artifactId>
  5. <version>0.1.55</version>
  6. </dependency>
  1. public class SftpUtils {
  2.  
  3. private static final Logger logger = LoggerFactory.getLogger(SftpUtils.class);
  4. private static final String SESSION_CONFIG_STRICT_HOST_KEY_CHECKING = "StrictHostKeyChecking";
  5.  
  6. /**
  7. * 创建SFTP连接
  8. * @return
  9. * @throws Exception
  10. */
  11. public static ChannelSftp createSftp(String username,String password,String host,int port) throws Exception {
  12. JSch jsch = new JSch();
  13. logger.info(("Try to connect sftp" + username + "@" + host + "], use password[" + password));
  14.  
  15. Session session = createSession(jsch,host, username, port);
  16. session.setPassword(password);
  17. session.connect(15000);
  18.  
  19. logger.info("Session connected to {"+ host);
  20.  
  21. Channel channel = session.openChannel("sftp");
  22. channel.connect();
  23.  
  24. logger.info("Channel created to"+ host);
  25.  
  26. return (ChannelSftp) channel;
  27. }
  28. /**
  29. * 创建session
  30. * @param jsch
  31. * @param host
  32. * @param username
  33. * @param port
  34. * @return
  35. * @throws Exception
  36. */
  37. private static Session createSession(JSch jsch, String host, String username, Integer port) throws Exception {
  38. Session session = null;
  39.  
  40. if (port <= 0) {
  41. session = jsch.getSession(username, host);
  42. } else {
  43. session = jsch.getSession(username, host, port);
  44. }
  45.  
  46. if (session == null) {
  47. throw new Exception(host + " session is null");
  48. }
  49. session.setConfig(SESSION_CONFIG_STRICT_HOST_KEY_CHECKING, "no");
  50. return session;
  51. }
  52.  
  53. /**
  54. * 关闭连接
  55. * @param sftp
  56. */
  57. public static void disconnect(ChannelSftp sftp) {
  58. try {
  59. if (sftp != null) {
  60. if (sftp.isConnected()) {
  61. sftp.disconnect();
  62. } else if (sftp.isClosed()) {
  63. //log.info("sftp is closed already");
  64. System.out.println("sftp is closed already");
  65. }
  66. if (null != sftp.getSession()) {
  67. sftp.getSession().disconnect();
  68. }
  69. }
  70. } catch (JSchException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74.  
  75. public static void download(String sftpUrl, String localFilePath, String sftpUsername, String sftpPassword, String sftpControlEncoding,String host,String port,String fileName) throws Exception {
  76. String username = StringUtils.isEmpty(sftpUsername) ? ConfigConstants.getSftpUsername() : sftpUsername;
  77. String password = StringUtils.isEmpty(sftpPassword) ? ConfigConstants.getSftpPassword() : sftpPassword;
  78. String controlEncoding = StringUtils.isEmpty(sftpControlEncoding) ? ConfigConstants.getSftpControlEncoding() : sftpControlEncoding;
  79.  
  80. logger.debug("SFTP connection url:{}, username:{}, password:{}, controlEncoding:{}, localFilePath:{}", sftpUrl, username, password, controlEncoding, localFilePath);
  81. String remoteFilePath = sftpUrl.split(host + "/")[1].split("\\?")[0];
  82. String encodefileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/")+1);
  83. String dir = remoteFilePath.replace("/" + encodefileName,"");
  84.  
  85. ChannelSftp channelSftp = createSftp(username,password,host,Integer.parseInt(port));
  86. OutputStream outputStream = Files.newOutputStream(Paths.get(localFilePath));
  87. channelSftp.cd(dir);
  88. channelSftp.get(fileName,outputStream);
  89. logger.debug("SFTP download success");
  90. outputStream.flush();
  91. outputStream.close();
  92. disconnect(channelSftp);
  93. }
  94.  
  95. public static void main(String[] args) throws GalimatiasParseException {
  96. String url = ("sftp://192.168.1.1/upload/test/demo/file.zip?sftp.username=sftpadmin&sftp.password=sftp&sftp.control.encoding=UTF-8");
  97. String[] arrsy = url.split("192.168.1.1/");
  98. System.out.println(url.split("192.168.1.1/"));
  99. System.out.println(arrsy[1].split("\\?")[0]);
  100.  
  101. String remoteFilePath = url.split("192.168.1.1" + "/")[1].split("\\?")[0];
  102. }
  103. }

二、客户端方式:

  1. 1 #!/bin/bash
  2. 2
  3. 3 SFTP_HOST_IP=192.168.1.1
  4. 4 SFTP_HOST_PORT=22
  5. 5 SFTP_HOST_USER=sftpadmin
  6. 6 SFTP_HOST_PASSWD=sftp
  7. 7 SFTP_BASE_DIR=upload
  8. 8 SYSTEM_CODE=$1
  9. 9 UPLOAD_FILE=$2
  10. 10
  11. 11 UPLOAD_DIR=${SFTP_BASE_DIR}/${SYSTEM_CODE}
  12. 12 sftpPutFiles(){
  13. 13 ftpUser=$1
  14. 14 ftpPwd=$2
  15. 15 host=$3
  16. 16 port=$4
  17. 17 remoteDir=$5
  18. 18 uploadFile=$6
  19. 19 lftp -u ${ftpUser},${ftpPwd} sftp://${host}:${port} <<EOF
  20. 20 cd ${remoteDir}
  21. 21 mput ${uploadFile}
  22. 22 bye
  23. 23 EOF
  24. 24 }
  25. 25 echo "上传文件开始:" +`date`
  26. 26 sftpPutFiles $SFTP_HOST_USER $SFTP_HOST_PASSWD $SFTP_HOST_IP $SFTP_HOST_PORT $UPLOAD_DIR $UPLOAD_FILE
  27. 27 echo "上传文件结束:" +`date`
  28. 28
  29. 29 sftpGetFiles(){
  30. 30 ftpUser=$1
  31. 31 ftpPwd=$2
  32. 32 host=$3
  33. 33 port=$4
  34. 34 remoteDir=$5
  35. 35 downFile=$6
  36. 36 lftp -u ${ftpUser},${ftpPwd} sftp://${host}:${port} <<EOF
  37. 37 cd ${remoteDir}
  38. 38 set xfer:clobber on
  39. 39 mget ${downFile}
  40. 40 bye
  41. 41 EOF
  42. 42 }
  43. 43 echo "下载文件开始:" +`date`
  44. 44 sftpGetFiles $SFTP_HOST_USER $SFTP_HOST_PASSWD $SFTP_HOST_IP $SFTP_HOST_PORT $UPLOAD_DIR
  45. 45 echo "下载文件结束:" +`date`

三、操作系统命令方式:

  1. 1 上传sftp
  2. 2 curl -T app.zip sftp://sftpuser:sftppasswd@127.0.0.1:12024/data/sftp_data/
  3. 3 下载sftp
  4. 4 curl sftp://sftpuser:sftppasswd@127.0.0.1:12024/data/sftp_data/file.txt -o file.txt

sftp文件上传下载方法的更多相关文章

  1. 使用PuTTY时的文件上传下载方法

    如果你是个PuTTY重度用户,在使用ssh连上一个远端机器工作了好一阵子后,发现自己需要对 当前会话 上传/下载文件,要怎样才能简单快捷呢? 最简单的方式 最简单的方法: 安装WinSCP或者File ...

  2. 我的代码库-Java8实现FTP与SFTP文件上传下载

    有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP ...

  3. Java实现FTP与SFTP文件上传下载

    添加依赖Jsch-0.1.54.jar <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <dependency ...

  4. Jsch - java SFTP 文件上传下载

    使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...

  5. SFTP 文件上传下载工具类

    SFTPUtils.java import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsEntry; import lombok.e ...

  6. Python Paramiko实现sftp文件上传下载以及远程执行命令

    一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...

  7. java实现sftp文件上传下载

    /** * * @param filePath 文件全路径 * @param ftpPath 上传到目的端目录 * @param username * @param password * @param ...

  8. 使用ssh 登录Linux 文件上传下载方法

    最简单的方法: 安装WinSCP或者Filezilla, 启动该程序,然后自己输入输入主机名.端口.用户名.密码登录,然后在putty里面用pwd命令看看当前目录,再在WinSCP/Filezilla ...

  9. SFTP 文件上传下载引用代码

    http://sha1064616837.iteye.com/blog/2036996 http://www.cnblogs.com/itmanxgl/p/fe5d33512609fe540eb08a ...

  10. SFTP文件上传下载

    http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html  (转载)

随机推荐

  1. MR+meta分析的摘录

    第四篇公众号:来自微信 天桥下的卖艺者 零基础说科研,仅为个人学习用,如有侵权,可以删除 吸烟没什么创意,唯一的创意就是加入了MR和meta分析,作者显示介绍吸烟与多种疾病之间的因果关系扔不明确, 第 ...

  2. java: 找不到符号 java: Compilation failed: internal java compiler error

    java: 找不到符号 java: Compilation failed: internal java compiler error 1.File---->Setting------>ja ...

  3. mysql8 windows 数据库名 表名 大小写

    由于Apollo的SQL 脚本是大小写的.mysql8 默认又是纯小写的. 解决方法: 方法1.卸载MYSQL,重新安装MYSQL时,高级选项中指定区分大写小.这种会清空所有库和数据.不建议. 方法2 ...

  4. invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法

    nvalid comparison: java.util.ArrayList and java.lang.String 异常解决方法异常原因首先我们可以确定是在mybatis的xml中的 list 操 ...

  5. 第一篇Scrum冲刺博客--原班人马打造队

    0 项目地址 点此进入 1 第一次开会/任务认领 1.1 第一次例会(2024.4.27) 第一次开会照片记录 1.2 开发认领 在查看老师在实验报告中学长的博客给了我一定的启发,我在腾讯表格中创建了 ...

  6. Masonry的进阶使用技巧

    Masonry是iOS开发中常见的视图约束框架,但是有人对他的使用还是浅尝辄止,接下来会提出几点比较少见但是又十分便捷的使用技巧. mas_greaterThanOrEqualTo mas_great ...

  7. Linux-swap管理

    什么是Swap Swap:交换空间,即虚拟内存,用于解决内存不足的问题. 在内存不足的时候,会将内存中不常使用的部分存入硬盘,使得内存得以腾出空间供新的程序使用. 那么,虚拟内存即为硬盘中的部分. S ...

  8. Kafka Stream 以及其他流处理框架对比

    1. Kafka Stream Introduction 假设我们需要对kafka 消息做流数据分析,例如: 对部分消息做过滤 每分钟计算一次收到了多少消息 这种情况下,对于消息过滤以及定时统计,甚至 ...

  9. Zynq 7000的3种IO

    概念 MIO MIO:多功能IO接口(分配在 GPIO 的 Bank0 和Bank1),属于Zynq的PS部分,在芯片外部有54个引脚.这些引脚可以用在GPIO.SPI.UART.TIMER.Ethe ...

  10. B 站和小红书又又又崩了,罪魁祸首竟然又是他。。。

    大家好,我是凌晨. 今天上午10点左右,我打开B站发现无法刷新视频列表和评论区,收藏夹和弹幕也均不可用. 原以为是手机网络问题,换网络重启手机都还是不行,第一时间打开微博,果然,B站崩了的新闻荣登榜首 ...