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

目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。

目录开始一直往上到系统根目录为止都不可以具有群组写入权限

上面2点一定注意,仔细检查。我就是因为这个问题,导致一直有这个问题。仔细检查配置后,解决问题。

服务器上安装vsftpd就是ftp服务,并开启允许root账户
本地使用FlashFXP这样的客户端上传;
服务器上安装vsftpd并开启root账户允许
(非必要不建议开启root账户)
yum -y install vsftpd
sed -i 's/root/#root/' /etc/vsftpd/ftpusers
sed -i 's/root/#root/' /etc/vsftpd/user_list
/etc/initd/vsftpd restart
本地使用flashfxp连接

windows中可以使用Core FTP,FileZilla, WinSCP,Xftp来连接SFTP进行上传,下载文件,建立,删除目录等 *** 作。以winscp软件为例:

1、将之前下载的sftp服务端解压缩,然后直接运行主程序。点“NEXT”按钮进行下面的 *** 作。

2、在许可协议窗口处填写“同意”并点“下一步”按钮继续。

3、在接下来的配置窗口中选择要安装的组件,从界面中可以看到包括client(客户端)与server(服务器端),实际上只需要服务器端,而客户端使用之前下载的WinSCP 382即可。选择相应的服务器端组件后点“下一步”完成安装4、 接下来就要启动该服务了,通过“开始->运行->输入CMD后回车”进入到命令提示窗口,然后通过cd命令定位到c:programfilesopensshbin目录。 5、依次执行mkgroup -l >> etcgroup mkpasswd -l >> etcpasswd命令,这样你目前windows本地帐户中的用户就都可以登录该sftp服务器了,自对文件目录的访问权限和NTFS权限一致。此步骤相当于FTP中的建立访问帐号。6、添加完各个访问帐户后就可以使用了。SFTP:sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。

你可以试试下面的方法,把sftp内的 *** 作都写到EOF里面
sftp -oPort=$PORT $USERNAME@$IP <<EOF
cd $FTP2DIR
mkdir $DATA_DATE
cd $DATA_DATE
put $EXPORT_LOCAL_DIR/$data_file_name
put $EXPORT_LOCAL_DIR/$verf_file_name
exit
close
bye
EOF


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12698415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存