zoukankan      html  css  js  c++  java
  • 【sftp 服务器的简单了解】

    项目上有服务器文件操作的需求, 遇到的问题和调试过程记录如下:

    简单了解SFTP:

      在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果对网络安全性要求更高时,可以使用SFTP代替FTP(来源:百度百科)

    调试背景:

      Sftp传输协议下的服务器文件接收与处理:(因为linux环境与windows环境的区别,测试存在一定不便,且服务器配置不同,所支持的ssh协议版本也不同);

    问题与收获:

      关于对服务器中外围接口推送的压缩文件处理:SFTP协议,接收压缩文件并进行解析: 其中最主要的就是读取文件,解压文件,备份文件,删除文件。

      开发时出现的错误基本上是由于无权限和路径错误导致(ps:路径错误也会显示无权限),另外服务器环境与本地开发环境不同,所以测试很容易出现差异。 根据开发需要,第一步要建立与ftp服务器的连接,这个时候抛出了异常信息:[could not parse reponse code],但是详细信息其实是在debug内的detailMessage内:[Could not parse response code. Server Reply: SSH-2.0-OpenSSH_6.6.1] ,百度可知原因是FTPClient不支持通过协议SSH2进行SFTP连接,只能更换方法实现,可以使用com.jcraft.jsch.JSch提供的SSH解决问题,即用ChannelSftp 代替FTPClient。

       服务器顺利连接后,访问文件出现了问题: Permission denied (没有权限访问),以及备份文件的时候出现 :No such file, 出现这两个问题的原因有二:路径不正确(这点也会导致报错无权限..),以及参数错误(比如备份文件时路径名要具体到/xx/wz.zip,如果只写路径或者文件名前缀是不行的)。

     

       关于linux上的路径分隔符目前有三种说法:\\xxx\\yy\\zz.txt ,或者/xxx/yy/zz.txt,或者使用File.separator作为分隔符,这样会根据环境自动使用/或者\\进行分割。windows本地测试很多方法是没法顺利访问服务器文件的,比如rename方法等(简单说一下这个方法:这个方法如果路径相同则会进行文件重命名,路径不同则会进行文件移动,备份文件可以用这个方法。)

    PS:sftp的很多方法在本地运行会出现权限问题,所以可以考虑用xshell等软件去远程访问服务器上的开发环境,打印日志,这样看报错也会方便很多 (例如: tail -500f app.log ,可以动态输出跟踪文件后500行数据)

  • 相关阅读:
    jquerymobile动态添加元素之后不能正确渲染解决方法
    HTML5的新事件
    Visual Studio 2010扩展让JS与CSS实现折叠
    移动web开发--meta 之 viewport
    QR code二维码简介及Qrencode库的移植与使用
    http,socks5,socks4代理的区别
    关于代理服务器的原理及用法
    MTK的线刷工具Flash_Tool的常见错误码
    承认吧 --- SVN你根本就不会用,细说SVN的那点事儿
    SSH协议介绍 --- 有用
  • 原文地址:https://www.cnblogs.com/dabuliu/p/15683947.html
Copyright © 2011-2022 走看看