php 如何通过连接sftp并下载sftp服务器指定目录下的所有文件到本地?

php 如何通过连接sftp并下载sftp服务器指定目录下的所有文件到本地?,第1张

一、下载并安装FTP客户端,例如我现在用的Xftp6。

xftp6中文版是一款高效实用的MS windows 平台专用SFTP、FTP 文件传输工具。xftp6中文版功能强劲,便捷好用,支持MS windows 用户安全地在 UNIX/Linux 和 Windows PC 之间进行文件传输。

二、点击文件-> 新建 

三、在弹出的对话框中输入

四、文件->打开创建的会话, 选择会话,点连接

五、在进入的界面,可以看到服务器文件,找到指定目录然后右键->传输就可以了。

写在最后:

SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

安装Internet 信息服务 Microsoft Internet 信息服务 (IIS) 是与 Windows Server 2003 集成的 Web 服务。 要安装 IIS、添加可选组件或删除可选组件,请按以下步骤操作: 1 单击开始,指向控制面板,然后单击“添加或删除程序”。 “添加或删除程序”工具就会启动。 2 单击添加/删除 Windows 组件。 显示“Windows 组件向导”。 3 在Windows 组件 列表中,单击Web 应用程序服务器。 4 单击详细信息,然后单击Internet 信息服务 (IIS)。 5 单击详细信息 ,以查看 IIS 可选组件列表。 6 选择您要安装的可选组件。默认情况下,下列组件是选中的: --- 公用文件 --- FrontPage 2002 Server Extentions --- Internet 信息服务管理单元 --- Internet 信息服务管理器 --- NNTP 服务 --- SMTP 服务 --- World Wide Web 服务 7 单击“World Wide Web 服务”,然后单击详细信息 ,以查看 IIS 可选子组件(如 Active Server Pages 组件和“远程管理 (Html) 工具”)的列表。选择您要安装的可选子组件。默认情况下,下列组件是选中的: --- World Wide Web 服务 8 单击确定 ,直到返回“Windows 组件向导”。 9 单击下一步,然后完成“Windows 组件向导”。 配置匿名身份验证 要配置匿名身份验证,请按以下步骤操作: 1 单击开始,指向管理工具,然后单击Internet 信息服务 (IIS)。 2 “ 服务器名称”(其中服务器名称 为该服务器的名称),右键单击Web 站点,然后单击属性。 3 在Web 站点属性 对话框中,单击目录安全性 选项卡。 4 在“身份验证和访问控制”下,单击编辑。 5 单击“启用匿名访问”复选框,将其选中。 备注:“用户名”框中的用户帐户只用于通过 Windows guest 帐户进行匿名访问。 默认情况下,服务器会创建并使用帐户 IUSR_computername。匿名用户帐户密码仅在 Windows 中使用;匿名用户不使用用户名和密码登录。 6 在“已验证身份的访问”下,单击“集成的 Windows 身份验证”复选框,将其选中。 7 单击确定 两次。 基本Web 站点配置 1 单击开始,指向管理工具,然后单击Internet 信息服务 (IIS)。 2 “ 服务器名称”(其中服务器名称 为该服务器的名称),然后Web 站点。 3 右键单击默认 Web 站点,然后单击属性。 4 单击Web 站点 选项卡。如果您已为计算机分配了多个 IP 地址,则请在IP 地址 框中单击您要指定给此 Web 站点的 IP 地址。 5 单击性能 选项卡。使用Web 站点属性 - 性能 对话框可设置影响内存、带宽使用和 Web 连接数量的属性。

使用软件呗 如果你只是想玩玩,使用Core FTP Mini-Sftp Server或者CoreFTPServer,这俩一个是精简功能的,一个是完整功能的 如果想非常专业的就Serv-U,这个软件是收费的 如果命令行很熟悉的话就用OpenSSH 最后推荐一个freeSSHd,图形化的,非常

使用这个功能之前, 你首先需要设置ODBC数据源

1 MySQL ODBC数据源可以在网址http://wwwmysqlcom/downloads/api-myodbchtml下载在运行Xlight FTP服务器的机器上安装MySQL ODBC数据源

2 安装完mysql ODBC数据源后你需要到Windows"控制面板-管理工具"中在"系统DSN"标签内添加MySQL数据源

3 选择"系统DSN"内的"添加(D)"按键,选择"MySQL ODBC Driver",按"完成"按键

4 在这个例子里, 我们使用 "Xlight FTP Server" 作为数据源名字 你可以使用任何数据源名字 这里假定MySQL数据库在远端192168112的LINUX服务器上 我们现要在其中创建一个名字是"ftp_user_db"的空数据库 这里你可以使用任何数据库名字 在机器192168112上, 在MySQL命令提示符 mysql>, 键入命令"create database ftpd_user_db;" 创建一个名字是 "ftpd_user_db" 的数据库 如果你需要在数据库中使用中文字符集,在"MySQL ODBC Driver"的[细节]-[连接]-[字符集]中编码要设为GB2312

5 你需要在Xlight FTP服务器的 [全局选项]->[高级]->[ODBC 数据库设置] 中配置外部数据库" 你需要填入数据库用户和密码,以及ODBC数据源 如果你想手工创建数据库表, 你可以跳到步骤 7 在这个例子里,我们假定数据库用户"test"对数据库"ftpd_user_db"有完全的访问权限 你可以点击"创建"键,让Xlight FTP服务器替你在数据库里创建需要的数据库你也可以点击"测试"键,检查你是否已正确创建数据表

注意: 对于64bit系统, 你需要用32bit ODBC管理程序设置DNS 32bit ODBC管理程序在C:\Windows\sysWOW64\odbcad32exe 具体原因可以查看 http://supportmicrosoftcom/kb/942976

6 通过ODBC使用外部用户数据库认证, 你需要到 [虚拟服务器设置]->[通用]->[虚拟服务器], 选择选项"启用外部用户鉴权" 单击"设置"键, 在虚拟服务器的"鉴权类型" 中必须选择ODBC, 如下图所示:

7 这个步骤只是用于手工创建数据库表 如果你已经在第5步完成数据库表的创建,你可以忽略这个步骤 手工创建数据库表,在数据库中需要两个表: acct_table and acct_param_table 你可以在Xlight FTP服务器的安装目录中的odbc目录下找到文件 "odbc_tablessql" 你可以用这个文件手工创建数据库表

8 为了安全的数据库访问, 创建上面两个表之后, 你可以在数据库中创建一个只读用户,他对"ftp_user_db"的数据库只有SELECT的权限,如下所示:

在MySQL命令提示符 mysql>, 键入命令 grant select on ftpd_user_db anon@'19216811%' Identified by "ftpd"; 这里你创建了一个新的数据库用户"anon",他的密码是"ftpd",他对数据库"ftpd_user_db"只有SELECT的访问权限 这个命令也限制用来查询数据库的访问只能来自网段"192168110" 然后你可以将Xlight FTP服务器的外部ODBC数据库配置中的用户和密码改成这个只读用户

现在你完成了ODBC设置步骤 ODBC功能是在每个虚拟服务器中单独启用的 在同一个Xlight FTP服务器,你可以有一些虚拟服务器使用ODBC外部用户数据库, 而一些不使用 如果你选择选项 "忽略 host_id 列" 或 "忽略 host_port 列", 在数据库查询时, Xlight FTP服务器将会忽略 "host_id" 或 "host_port" 列 因为 "host_id" 列可以用来表示不同的机器, 而 "host_port" 列可以用来表示在同一台机器上的不同的虚拟服务器 这两个选项可以用来在不同运行Xlight FTP服务器的机器间共享用户数据库,也可以在同一个机器的不同虚拟服务器间共享用户数据库 如果你只用数据库鉴权用户, 你可以选择选项 "只检查用户名和密码", 使用这个选项你需要在本地FTP服务器创建同名的用户 数据库只是用来检查用户存在数据库中的密码 当这个选项启用, 所有的用户设置都是从本地服务器中同名的用户设置里获得

在数据库中创建用户

你可以使用外部的数据库工具连接到数据库并创建用户 这只是用于测试目的

在实际的生产环境里, 你可以使用 PHP 或 其他 CGI 脚本创建基于网页的界面,用于添加,删除或允许用户通过网页更改密码等等这种方式便于管理大量的用户你也可以和你现有的数据库应用结合 因为Xlight FTP服务器只需要读取用户数据库, 但不写入用户数据库, 你不需要担心和你其他数据库应用冲突

在数据库创建用户之前, 你最好先阅读 Xlight 帮助文档中, "ODBC 数据库表结构" 这一节

用户的密码可以是以 MD5/SHA1 Hash或明码的形式存放在数据库 默认是使用MD5 hash 你可以在虚拟服务器的外部用户认证,ODBC设置中更改密码类型 如果使用 MD5 hash, 你可以通过搜索"MD5 calculator" 很容易在Google找到MD5计算的工具 在我们的例子里用户名是 "test" 他的密码也是 "test" , 密码的MD5 hash值是"098f6bcd4621d373cade4e832627b4f6" 如下图所示:

注意: 如果用户的主目录不存在, 当他第一次登录时, Xlight FTP服务器会自动在本地创建目录 例如, 当用户名是"test" 的主目录"c:\wutemp"不存在 当这个名字是"test"的用户登录时, Xlight FTP服务器会自动为他创建这个目录

如果你想使用更多的用户参数, 你可以在数据表 "acct_param_table" 中创建 "param_index" 列 在这一行中填入你想使用的参数, 并且将这个参数放到这个用户在"acct_table"表中的"param_index"列 列"param_index"的值可以在不同用户间共享, 因此如果你有很多用户有同样的参数, 在数据表 "acct_param_table" 中你不需要创建很多不同的"param_index"行

对于你不使用的数据库表中的那些列, 你可以让它们的值为空 但列 "host_id", "host_port", "username" 是必须的值, 你必须填写 另外如果使用"home_path"列,"home_perm"列也必须填写

"virtual_path_table" 被用来设置用户的虚拟目录 一个用户在数据库中可以有多个虚拟目录 这些虚拟目录在"virtual_path_table"表中有不同或相同的"virtual_path_index" 在"acct_table"中的"virtual_path_indexes"列通过"virtual_path_index"列链接到"virtual_path_table"的一个或多个行 如果他包含多个"virtual_path_index", 它们之间必须通过","(逗号)分隔

参数%username%可以用于"virtual_path_table"里的real path %username%将会被替换成实际登录的用户名 如果用户登录时real path不存在, Xlight FTP服务器将会自动创建目录

查找并解决数据库认证问题

通过选中选项"在错误日志显示调试跟踪信息",可以帮助你查找并解决数据库认证的问题,这个选项可以在[虚拟服务器设置]->[启用外部用户鉴权]找到 启用这个选项后, 你可以在错误日志看到Xlight FTP服务器数据库查询过程

使用其他数据库

当用户登录Xlight服务器时,服务器会通过ODBC连接,用SQL语句分两次查询数据库。

第一个数据库的SQL查询用于在数据库中找到与用户登录时输入的用户名,密码相匹配的纪录,并且获得关于这个用户的一些基本配置参数,如"home_path", "home_perm" 等等 在这次查询中返回的"param_index"值将会同时用在第二次数据库查询。

第二次数据库的SQL查询将会用第一次查询返回的"param_index"值,查询数据库的"acct_param_table",以得到更多的用户参 数设置。

Xlight服务器使用的"acct_table"和"acct_param_table"数据库表可以不实际存在与数据库里 Xlight服务器并不知道"acct_table"和"acct_param_table"是否存在于数据库中 它只是通过察看两个SQL查询的返回结果 如果第一条SQL查询替换语句从数据库中返回一行, Xlight服务器就认为用户登录验证成功,同时它会从返回的行中,获得用户的基本配置参数 如果数据库没有返回结果,它认为用户登录验证失败。 所以数据库如果不想让用户访问服务器,就不要返回SQL查询结果 在第一条查询返回的"param_index"值,将会用在第二条SQL查询语句中

Xlight服务器允许管理员替换上面两个SQL查询语句,以支持高级的数据库应用,如数据库的"存储过程"(Stored Procedure), 你可以看这个例子如何使用数据库存储过程

替换第一条内部SQL查询语句 - 在第一条SQL替换语句中,可以使用下面的变量:

$USER - 这个变量将以用户的登录名替换

$PASS - 这个变量将以用户的密码(MD5或Text)替换

$ID - 这个变量将以"本地主机ID"替换

$PORT - 这个变量将以虚拟服务器的端口替换

$USERIP - 这个变量将以用户的IP地址替换

$SERVERIP - 这个变量将以虚拟服务器的IP地址替换

例如, 如果用语句 "EXEC proc_getuser '$USER', '$PASS', $ID, $PORT" 作为第一条SQL语句的替换, 当用户是"test"的用户以密码"hello"登录到FTP服务器21端口, 本地主机ID是1, 经过替换最后送到数据库的SQL语句是 "EXEC proc_getuser 'test', 'hello', 21, 0"

替换第二条内部SQL查询语句 - 在第二条SQL替换语句中,可以使用下面的变量:

$INDEX - 这个变量将会替换为第一条SQL替换查询语句返回的"param_index"值

$PORT - 这个变量将以虚拟服务器的端口替换

$SERVERIP - 这个变量将以虚拟服务器的IP地址替换

传输文件使用ftp协议速度快。

区别如下:

一、指代不同

1、scp:是用来进行远程文件拷贝的,是 SSH 中最方便有用的命令。

2、ftp: 是 TCP/IP 协议组中的协议之一。

3、sftp:安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。

二、使用方式不同

1、scp:scp 在需要进行验证时会要求你输入密码或口令。

2、ftp:FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。

3、sftp:为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。

三、特点不同

1、scp:数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 。

2、ftp:下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。

3、sftp:SFTP本身没有单独的守护进程,必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

-scp

-FTP协议

-sftp

ftps和sftp这两个协议怎么应用?

都是为ftp连接加密,协议非常相似。一个是借助ssl协议加密,一个时借助ssh加密。

ssl是为http/smtp等加密设计的,ssh是为telnet/ftp等加密、建立传输通道而设计的。

其实ssh建立传输通道就是为了加密和传输,而且这个通道是可以用来远程登录。

如果只说它们的功能,通俗的讲,ssh就像铺管子,ssl就像打包裹,铺管子和打包裹都会使数据安全,都是一个制作密钥的过程,而因为ssh是一个管子所以它很适合ftp的安全传输。其实,还是要从原理上总结一下。

简单的讲:sftp协议是ssh中的一条独立的协议,利用sftp服务器就可以传输数据。

而ftps是ftp-over-ssl的意思,即ftp借助ssl协议加密传输,不但要用ftp服务器还要用ssl协议加密。

(如果是ftp-over-ssh,就是完全不同于sftp的传输方式了,就是利用ftp服务器和ssh协议加密传输数据。)

sftp如何停止下载?

打开手机商城,点击下载管理,然后选择sftp软件,点击中断下载即可

termuxsftp怎么传本地文件?

答解决方法如下

1打开Termius,然后左侧菜单栏选择SFTP,即可看到SFTP界面。是本地目录,右边我们可以选择远程VPS,点击SELECTHOST,然后选择要连接的VPS进行连接即可。

2、连接之后,可以点击最上面的返回上机目录,也可以双击任意目录进入对应的目录。

3、然后我们右击想要上传的文件或者目录,选择Copytotargetdirectory即可进行传输。

如果是右击本地文件,就是从本地上传到VPS;如果是右击VPS的文件,那么就是从VPS下载到本地。

4、如果想要实现在两台VPS之间胡传文件,也很简单,只需要点击左侧的Local,然后选择一个VPS进行连接,之后就可以在两台VPS之间传输文件

什么安卓手机文件管理器最好用啊?

MT管理器采用双窗口操作风格,让你来回移动复制文件更加的便捷。还拥有查看、音乐播放、字体预览、执行脚本、文本对比等功能,还自带压缩解压功能,手机中的ZIP或RAR文件也能轻松解压处理。

package jsch;

import javaioFile;

import javaioFileInputStream;

import javautilProperties;

import comjcraftjschChannel;

import comjcraftjschChannelSftp;

import comjcraftjschJSch;

import comjcraftjschJSchException;

import comjcraftjschSession;

public class Test {

    protected String host;//sftp服务器ip

    protected String username;//用户名

    protected String password;//密码

    protected String privateKey;//密钥文件路径

    protected String passphrase;//密钥口令

    protected int port = 22;//默认的sftp端口号是22

    /

      获取连接

      @return channel

     /

    public ChannelSftp connectSFTP() {

        JSch jsch = new JSch();

        Channel channel = null;

        try {

            if (privateKey != null && !""equals(privateKey)) {

                //使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥

                if (passphrase != null && ""equals(passphrase)) {

                    jschaddIdentity(privateKey, passphrase);

                } else {

                    jschaddIdentity(privateKey);

                }

            }

            Session session = jschgetSession(username, host, port);

            if (password != null && !""equals(password)) {

                sessionsetPassword(password);

            }

            Properties sshConfig = new Properties();

            sshConfigput("StrictHostKeyChecking", "no");// do not verify host key

            sessionsetConfig(sshConfig);

            // sessionsetTimeout(timeout);

            sessionsetServerAliveInterval(92000);

            sessionconnect();

            //参数sftp指明要打开的连接是sftp连接

            channel = sessionopenChannel("sftp");

            channelconnect();

        } catch (JSchException e) {

            eprintStackTrace();

        }

        return (ChannelSftp) channel;

    }

    

    /

      上传文件

      

      @param directory

                 上传的目录

      @param uploadFile

                 要上传的文件

      @param sftp

     /

    public void upload(String directory, String uploadFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            File file = new File(uploadFile);

            sftpput(new FileInputStream(file), filegetName());

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    /

      下载文件

      

      @param directory

                 下载目录

      @param downloadFile

                 下载的文件

      @param saveFile

                 存在本地的路径

      @param sftp

     /

    public void download(String directory, String downloadFile,

            String saveFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            sftpget(downloadFile,saveFile);

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    /

      删除文件

      

      @param directory

                 要删除文件所在目录

      @param deleteFile

                 要删除的文件

      @param sftp

     /

    public void delete(String directory, String deleteFile, ChannelSftp sftp) {

        try {

            sftpcd(directory);

            sftprm(deleteFile);

        } catch (Exception e) {

            eprintStackTrace();

        }

    }

    

    public void disconnected(ChannelSftp sftp){

        if (sftp != null) {

            try {

                sftpgetSession()disconnect();

            } catch (JSchException e) {

                eprintStackTrace();

            }

            sftpdisconnect();

        }

    }

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » php 如何通过连接sftp并下载sftp服务器指定目录下的所有文件到本地?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情