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操作实例

<?php
$strServer = "127.0.0.1";
$strServerPort = "28";
$strServerUsername = "sun";
$strServerPassword = "141592";
$csv_filename = "test.txt"; //connect to server
$resConnection = ssh2_connect($strServer, $strServerPort); //ssh2_auth_password — Authenticate over SSH using a plain password
if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
echo "connected\r\n"; //ssh2_sftp — Initialize SFTP subsystem
$resSFTP = ssh2_sftp($resConnection); $resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w'); //获取句柄
fwrite($resFile, "Testing"); //写入内容
fclose($resFile); //关闭句柄
echo "success\r\n";
}else{
echo "Unable to authenticate on server";
}
?>

SFTP操作类

<?php

class SFTPConnection
{
private $connection;
private $sftp; public function __construct($host, $port=22)
{
$this->connection = @ssh2_connect($host, $port);
if (! $this->connection)
throw new Exception("Could not connect to $host on port $port.");
} public function login($username, $password)
{
if (! @ssh2_auth_password($this->connection, $username, $password))
throw new Exception("Could not authenticate with username $username " .
"and password $password."); $this->sftp = @ssh2_sftp($this->connection);
if (! $this->sftp)
throw new Exception("Could not initialize SFTP subsystem.");
} public function uploadFile($local_file, $remote_file)
{
$sftp = $this->sftp;
$stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w'); //w if (! $stream)
throw new Exception("Could not open file: $remote_file"); $data_to_send = @file_get_contents($local_file);
if ($data_to_send === false)
throw new Exception("Could not open local file: $local_file."); if (@fwrite($stream, $data_to_send) === false)
throw new Exception("Could not send data from file: $local_file.");
@fclose($stream);
return true;
} }

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

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. win7下如何解决对方可以ping通我,但我ping不通对方问题

    以下是在百度经验里面找到的文章:http://jingyan.baidu.com/article/6b97984da3ac851ca2b0bfe1.html 当我在虚拟机的linux系统中ping本机 ...

  2. Sass进阶之路,之一(基础篇)

    Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...

  3. Feign性能优化注意事项--超时

      Caused by: java.lang.IllegalStateException: PathVariable annotation was empty on param 1. at feign ...

  4. 合天misc100

    打开txt文件是一串RGB颜色值 用len(file.readlines()),发现颜色值有61366个,能分解成122*503 from PIL import Image length = 122 ...

  5. ShellExecute 启动外部程序 参数详细介绍

    ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 目录 1基本简介 2原型参数 3返回值 4例子 5特殊用法 ...

  6. WPF popup被截断的原因和修改方法

    原因:wpf里 popup不能超过屏幕75%的面积,不知道为什么要这么设置? 修改方法: private void SetPopupScreen() { Rect rtWnd = , , gridMa ...

  7. SDWebImage实现图片展示、缓存、清除缓存

    1. /* 图片显示 */ [self.imageView sd_setImageWithURL:[NSURL URLWithString:urlString]];                [s ...

  8. EF6 CodeFirst代码迁移笔记

        由于EF7只支持codefirst only.朕无奈被微软逼上了梁山学一下codefirst,就算是为明年做准备吧.写的这些网上大致都有,基本没啥 新内容, 迁移 使用自动迁移 Enable- ...

  9. 统计SQL Server所有表记录数

    SELECT SCHEMA_NAME(t.schema_id) AS [schema] ,t.name AS tableName ,i.rows AS [rowCount] FROM sys.tabl ...

  10. 推荐 VSCode 上特别好用的 Vue 插件 - vetur

    作者 @octref 此前 V2EX 发过帖子,最近新增代码补全功能,综合比较应该是目前 VSCode 上面最好用的 Vue 插件. 能够实现在 .vue 文件中: 语法错误检查,包括 CSS/SCS ...