SFTP 怎么往服务器上上传整个文件夹?

SFTP 怎么往服务器上上传整个文件夹?,第1张

使用SecureSRT中的SFTP传递文件夹时,有个小细节值得注意一下:

1)在文件夹名dirname后加上'/',传输后,目标位置没有新建文件夹dirname,只有dirname文件夹下的各个文件。

如:

sftp> get -r smsrc/

2)在文件夹名dirname后不加'/',传输后,目标位置新建文件夹dirname,所有文件位置新建文件夹dirname下。

如:

sftp> get -r smsrc

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();

        }

    }

}

在左窗格中,单击“接收端口”节点,在右窗格中,右键单击你希望将新的接收位置与其关联的接收端口,然后单击“属性”。在“接收端口属性”对话框的左窗格中,选择“接收位置”,然后在右窗格中单击“新建”以创建新的接收位置。在“接收位置属性”对话框的“传输”部分中,从“类型”下拉列表中选择“SFTP”,然后单击“配置”以配置接收位置的传输属性。在“SFTP 传输属性”对话框的“常规”选项卡中,执行以下操作:�0�2 使用此选项 执行此操作 ConnectionLimit指定服务器允许的并行打开的最大连接数。0 表示无限制。PollingInterval指定适配器轮询服务器的时间间隔。若要连续轮询,请将此值设置为零。默认值:零单位指定所指定的轮询间隔的单位,例如,秒、分钟、小时或天。默认值:秒AccessAnySSHServerHostKey如果设置为 True,则接收位置接受来自服务器的任何 SSH 公共主机密钥。如果设置为 False,则接收位置使用服务器的指纹进行身份验证。你在 SSHServerHostKeyFingerPrint 属性中指定指纹。默认值:FalseClientAuthenticationMode指定接收位置用于对连接 SSH 服务器的客户端进行身份验证的身份验证方法。如果设置为“密码”,则必须在“密码”属性中指定值。如果设置为 PublicKeyAuthentication,则必须在 PrivateKey 属性中指定用户的私钥。此外,如果该私钥受密码保护,则还要为 PrivateKeyPassword 属性指定密码。默认值: 密码密码如果将 ClientAuthenticationMode 设置为“密码”,则指定 SFTP 用户密码。PrivateKey如果将 ClientAuthenticationMode 设置为 PublicKeyAuthentication,则指定 SFTP 用户的私钥。便笺 该私钥必须是指定的 pkf 文件。PrivateKeyPassword指定私钥密码,如果在 PrivateKey 属性中指定的密钥要求这样做。SSHServerHostKey指定安全 FTP 服务器的 SSH 公共主机密钥。用户名指定安全 FTP 服务器的用户名。FileMask指定在从安全 FTP 服务器检索文件时要使用的文件掩码。FolderPath指定安全 FTP 服务器上可供接收位置从中检索文件的文件夹路径。端口指定在其上进行文件传输的安全 FTP 服务器的端口地址。ServerAddress指定安全 FTP 服务器的服务器名称或 IP 地址。单击“确定”。

SFTP和FTP非常相似,都支持批量传输(一次传输多个文件),文件夹/目录导航,文件移动,文件夹/目录创建,文件删除等。

1、安全通道

FTP 不提供任何安全通道来在主机之间传输文件;而SFTP协议提供了一个安全通道,用于在网络上的主机之间传输文件。

2、使用的协议

FTP使用TCP / IP协议。而,SFTP是SSH协议的一部分,它是一种远程登录信息。

3、链接方式

FTP使用TCP端口21上的控制连接建立连接。而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。

4、安全性

FTP密码和数据以纯文本格式发送,大多数情况下是不加密的,安全性不高。而,SFTP会在发送之前加密数据,二进制的形式传递,是无法“按原样”阅读的,安全性较高。

使用这个功能之前, 你首先需要设置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地址替换

Windows7系统连接FTP服务器方法:

1、打开->计算机 在工具栏中选择 ->映射网络驱动器。

2、经过上一步弹出映射网络驱动器。在弹出的窗口中选择“连接到可用于存储文档和的网站”;选择完成出现下一个窗口直接下一步。

3、选择自定义网络位置,选择后点击下一步,弹出一个新窗口,这里面需要输入ftp服务器的ip地址,输入完成后下一步。

4、上一步通过后会弹出一个新窗口,没有设置的内容请直接下一步,之后又弹出一个新窗口,这个窗口是配置完成之后你登录ftp图表的名字,请随意填写即可。

5、FTP登录客户端位置,经过以上4步的配置FTP连接方式已经成功完成,而且通这种方法配置是会永久可用的,不需去手动填写FTP的ip地址,登录ftp服务非常容易,打开win7 系统的计算机,在硬盘和光驱下面就会出现fpt登录的图表。

6、配完可能会出现登录ftp在网页下显示,这样是不对的,需要修改为资源管理器显示,这样操作才方便,具体步骤打开IE浏览器-->工具-->internet选项,修改显示方式。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » SFTP 怎么往服务器上上传整个文件夹?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情