SFTP应用(二)

SFTP Server
SSH2
sftp操作

FTP进行文件传输需要通过端口进行。一般所需端口为:

  1. 控制链路—TCP端口21。控制器端。用于发送指令给服务器以及等待服务器响应。
  2. 数据链路---TCP端口20。数据传输端口。用来建立数据传输通道的。主要用来从客户向服务器发送一个文件、从服务器向客户发送一个文件、从服务器向客户发送文件或目录列表。

FTP为了适应不同的网络环境,支持主动连接和被动连接两种模式。这两种模式都主要针对数据链路进行的,跟控制链路无关。

FTP的安全隐患:

  1. FTP服务器软件漏洞。
  2. 明文口令。
  3. FTP旗标。
  4. 通过FTP服务器进行端口扫描。
  5. 数据劫持。

FTP的安全策略:

  1. 使用较比安全的系统和FTP服务软件。
  2. 使用密文传输用户名和口令。
  3. 更改服务软件的旗标。
  4. 加强协议安全性。

SFTP是Secure File Transfer Protocol的缩写,是安全文件传送协议。可以为传输文件提供一种安全的加密方法。跟ftp几乎语法功能一样。
SFTP是SSH的一部分,是一种传输档案至Blogger伺服器的安全方式。它本身没有单独的守护进程,必须使用sshd守护进程来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以使用SFTP是十分安全的。但由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。在对网络安全性要求更高时,代替FTP使用。

搭建SFTP server【我这里用的是Windows系统】

  • 使用FreeSSHrd;
  • 教程自行百度(很简单的),我这里创建了用户 sun ,密码141592;地址使用127.0.0.1,端口号 28(22端口被其他应用占用了,端口号随意设置,不要冲突就好),下面我会对此测试。

开启ssh2扩展【我这里用的是wamp】

  1. 打印phpinfo();找到你的Architectrue、Thread Safety(enabled 线程;disabled 非线程),后面会用到;

  2. http://windows.php.net/downloads/pecl/releases/ssh2/0.12 打开找到你的对应版本下载下来;

  3. 会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb。将 php_ssh.dll、php_ssh2.pdb 放到你的wamp/bin/php/ext/ 下;将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份

  4. 在wamp中的 php.ini中加入 extension=php_ssh2.dll。

  5. 重启wamp,扩展打开。

注意

  • 下载正确的ssh版本dll;

PHP操作实例

  1. <?php
  2. $strServer = "127.0.0.1";
  3. $strServerPort = "28";
  4. $strServerUsername = "sun";
  5. $strServerPassword = "141592";
  6. $csv_filename = "test.txt";
  7. //connect to server
  8. $resConnection = ssh2_connect($strServer, $strServerPort);
  9. //ssh2_auth_password — Authenticate over SSH using a plain password
  10. if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
  11. echo "connected\r\n";
  12. //ssh2_sftp — Initialize SFTP subsystem
  13. $resSFTP = ssh2_sftp($resConnection);
  14. $resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w'); //获取句柄
  15. fwrite($resFile, "Testing"); //写入内容
  16. fclose($resFile); //关闭句柄
  17. echo "success\r\n";
  18. }else{
  19. echo "Unable to authenticate on server";
  20. }
  21. ?>

SFTP操作类

  1. <?php
  2. class SFTPConnection
  3. {
  4. private $connection;
  5. private $sftp;
  6. public function __construct($host, $port=22)
  7. {
  8. $this->connection = @ssh2_connect($host, $port);
  9. if (! $this->connection)
  10. throw new Exception("Could not connect to $host on port $port.");
  11. }
  12. public function login($username, $password)
  13. {
  14. if (! @ssh2_auth_password($this->connection, $username, $password))
  15. throw new Exception("Could not authenticate with username $username " .
  16. "and password $password.");
  17. $this->sftp = @ssh2_sftp($this->connection);
  18. if (! $this->sftp)
  19. throw new Exception("Could not initialize SFTP subsystem.");
  20. }
  21. public function uploadFile($local_file, $remote_file)
  22. {
  23. $sftp = $this->sftp;
  24. $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w'); //w
  25. if (! $stream)
  26. throw new Exception("Could not open file: $remote_file");
  27. $data_to_send = @file_get_contents($local_file);
  28. if ($data_to_send === false)
  29. throw new Exception("Could not open local file: $local_file.");
  30. if (@fwrite($stream, $data_to_send) === false)
  31. throw new Exception("Could not send data from file: $local_file.");
  32. @fclose($stream);
  33. return true;
  34. }
  35. }

------ 天行健,君子以自强不息!

PHP SFTP应用(二)的更多相关文章

  1. 给sftp创建新用户、默认打开和限制在某个目录

    一.环境: CentOS 6.8 使用 FileZilla 进行 sftp 连接 二.背景 给外包的工作人员提供我司服务器的某一目录的访问(包括读写)权限,方便他们部署代码文件. 之所以是某一目录的访 ...

  2. Xshell5下利用sftp上传下载传输文件

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...

  3. 浅谈SFTP和FTP的区别

    一.适用场景 我们平时习惯了使用ftp来上传下载文件,尤其是很多Linux环境下,我们一般都会通过第三方的SSH工具连接到Linux,但是当我们需要传输文件到Linux服务器当中,很多人习惯用ftp来 ...

  4. Centos6搭建sftp服务器

    一.创建sftp相关用户和目录 [root@mail samba]# useradd -s /sbin/nologin -M sftp_user #创建一个系统用户,按需设置登录的shell和家目录 ...

  5. Centos下SFTP双机高可用环境部署记录

    SFTP(SSH File Transfer Protocol),安全文件传送协议.有时也被称作 Secure File Transfer Protocol 或 SFTP.它和SCP的区别是它允许用户 ...

  6. Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】

    []如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...

  7. C# sftp通过秘钥上传下载

    一.适用场景 我们平时习惯了使用ftp来上传下载文件,尤其是很多Linux环境下,我们一般都会通过第三方的SSH工具连接到Linux,但是当我们需要传输文件到Linux服务器当中,很多人习惯用ftp来 ...

  8. 【转载】xShell5 利用 sftp 在本地和服务器之间传输文件

    sftp是Secure File TransferProtocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp与 ftp有着几乎一样的语法和功能.SFTP为 SSH的一部分 ...

  9. CentOS 7 配置SFTP

    目前越来越多的FTP客户端软件开始支持SSH协议上传和下载文件,这种协议方式就是SFTP. SFTP的优势主要有两点,一是不需要再配置个FTP服务端:二是SSH协议是安全传输,上传和下载是经过加密的. ...

  10. 如何在CentOS 7上使用vsftpd设置ftp服务器

    一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...

随机推荐

  1. spring中获取applicationContext(2)

    前几天写web项目的时候,用到了spring mvc. 但是又写bean.我要在代码里面生成,而这个bean里面,又有一些属性是通过spring注入的. 所以,只能通过ApplicationConte ...

  2. 前端项目中使用git来做分支和合并分支,管理生产版本

    最近由于公司前端团队扩招,虽然小小的三四团队开发,但是也出现了好多问题.最让人揪心的是代码的管理问题:公司最近把版本控制工具从svn升级为git.前端H5组目前对git的使用还不是很熟悉,出现额多次覆 ...

  3. kafka 启动 报错cannot allocate memory,即内存不足

    错误提示: Java Hotspot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 9865134 ...

  4. [转]微信小程序之购物车 —— 微信小程序实战商城系列(5)

    本文转自:http://blog.csdn.net/michael_ouyang/article/details/70755892 续上一篇的文章:微信小程序之商品属性分类  —— 微信小程序实战商城 ...

  5. css3 transform(变形)笔记

    Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix. 一.旋转 ...

  6. Java JDK 配置环境变量

    使用了java也有了两年了,安装了很多次jdk都记不住安装步骤 = =,刚刚又配置了一次,码一下步骤: 1.右击"此电脑" ---> "属性" ----& ...

  7. python可变对象与不可变对象

    可变/不可变对象定义 不可变对象 该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. 可 ...

  8. vue-quill-editor 富文本集成quill-image-extend-module插件实例,以及UglifyJsPlugin打包抱错问题处理

    官网 vue-quill-editor Toolbar Module - Quill vue-quill-image-upload 图片支持上传服务器并调整大小 1.在 package.json 中加 ...

  9. JavaScript document和window属性及方法详解

    [document对象] 该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档. 属性 alinkColor 活动链接的颜色(ALINK)  anchor 一个HTMI锚点 ...

  10. 微信获取openId

    router.beforeEach(function(to, from, next){ //中间页等待跳转 if(to.meta.requireCheck=="WaitLogin" ...