插件窝 干货文章 如何用SFTP下载远程文件

如何用SFTP下载远程文件

文件 remote 使用 SFTP 879    来源:    2025-05-07

使用SFTP下载远程文件的详细指南

SFTP (SSH File Transfer Protocol) 是一种安全的文件传输协议,基于SSH连接。以下是使用SFTP下载远程文件的方法:

方法一:使用命令行工具

1. 基本下载命令

sftp username@remote_host

连接后使用:

get remote_file [local_file]
  • remote_file: 远程文件路径
  • local_file: (可选)本地保存路径和文件名,不指定则使用原名

2. 直接下载(不进入交互模式)

sftp username@remote_host:remote_file local_file

3. 递归下载整个目录

sftp -r username@remote_host:remote_directory local_directory

方法二:使用图形界面工具

1. FileZilla

  1. 打开FileZilla
  2. 在顶部输入:
    • 主机:sftp://remote_host
    • 用户名:your_username
    • 密码:your_password
    • 端口:22(默认)
  3. 连接后,右侧为远程文件,左侧为本地文件
  4. 右键点击远程文件 → "下载"

2. WinSCP (Windows)

  1. 打开WinSCP
  2. 选择"SFTP"协议
  3. 输入主机名、用户名和密码
  4. 连接后,拖放文件从右侧(远程)到左侧(本地)

方法三:编程实现

Python示例 (使用paramiko库)

import paramiko

# 建立连接
transport = paramiko.Transport(('remote_host', 22))
transport.connect(username='username', password='password')

# 创建SFTP客户端
sftp = paramiko.SFTPClient.from_transport(transport)

# 下载文件
sftp.get('/remote/path/file.txt', '/local/path/file.txt')

# 关闭连接
sftp.close()
transport.close()

Java示例 (使用JSch库)

import com.jcraft.jsch.*;

public class SFTPDownload {
    public static void main(String[] args) {
        JSch jsch = new JSch();
        Session session = null;
        try {
            session = jsch.getSession("username", "remote_host", 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword("password");
            session.connect();

            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;

            sftpChannel.get("/remote/path/file.txt", "/local/path/file.txt");
            sftpChannel.exit();
            session.disconnect();
        } catch (JSchException | SftpException e) {
            e.printStackTrace();
        }
    }
}

常见问题解决

  1. 连接被拒绝

    • 检查远程主机是否开启SSH服务
    • 确认端口是否正确(默认22)
  2. 认证失败

    • 检查用户名和密码
    • 如需密钥认证,使用-i参数指定私钥文件: bash sftp -i /path/to/private_key username@remote_host
  3. 权限问题

    • 确保对远程文件有读取权限
    • 确保对本地目录有写入权限
  4. 大文件传输

    • 考虑使用rsync代替,支持断点续传
    • 或使用screen/tmux保持会话

希望这些方法能帮助您成功下载远程文件。根据您的具体环境和需求选择最适合的方式。