中文

使用 FileZilla 通过 SFTP 向 Linux VPS 传输文件

1 min
VPS/VDS 主机

SFTP 运行在现有的 SSH 连接之内,因此服务器上无需额外软件,也不需要新增端口。在 VPS Linux Infrawire 上,用 FileZilla 这样的图形客户端上传网站或下载备份,是最安全的方式。本文涵盖密码和密钥登录、文件权限,以及仅限 SFTP 的受限用户。

📋 前提条件

  • 一台 Linux VPS(Ubuntu 24.04、Debian 12、AlmaLinux 9 或 Rocky 9),SSH 在 22 端口正常工作。
  • VPS 的 IP 和 root 密码,可在客户区查看。
  • 在你的电脑上安装 FileZilla Client(是 Client,不是 FileZilla Server)。

1. 用密码快速连接

首次测试时,使用 FileZilla 顶部的快速连接栏:

  • 主机:sftp://VPS_IP
  • 用户名:USER
  • 密码:你的密码
  • 端口:22

第一次连接时接受主机密钥。右侧面板会显示服务器的文件树。建议使用普通用户而不是 root:误操作造成的损失更小。

Bash
adduser USER usermod -aG sudo USER

在 AlmaLinux 或 Rocky 上,请使用 useradd -m USER、passwd USER 和 usermod -aG wheel USER。

2. 使用 SSH 密钥登录

密钥比密码更安全,也无法被暴力破解。在你自己的电脑上生成密钥对,并把公钥复制到服务器。

Bash
ssh-keygen -t ed25519 -C "filezilla" ssh-copy-id USER@VPS_IP

在 FileZilla 中打开 编辑 > 设置 > 连接 > SFTP > 添加密钥文件,选择你的私钥(不带 .pub 的文件)。FileZilla 可能会提示转换为其自有格式,请同意。切勿分享私钥。

3. 在站点管理器中保存连接

  1. 打开 文件 > 站点管理器,点击 新站点。
  2. 协议:SFTP - SSH File Transfer Protocol。
  3. 主机:VPS_IP,端口:22。
  4. 登录类型:密码选 正常,密钥选 密钥文件。
  5. 用户:USER。在“高级”选项卡中设置默认远程目录,例如 /var/www/example.com。
  6. 点击 连接。该站点会被保存,下次直接使用。

不要在你无法掌控的电脑上保存密码。

4. 设置网站文件的所有者和权限

上传的文件常常属于错误的用户,导致 403 或 500 错误。请把网站目录交给你的用户,并让 Web 服务器能够读取。

Bash
mkdir -p /var/www/example.com chown -R USER:www-data /var/www/example.com find /var/www/example.com -type d -exec chmod 755 {} \; find /var/www/example.com -type f -exec chmod 644 {} \;

在 AlmaLinux 和 Rocky 上,Web 服务器的用户组是 apache,而不是 www-data。应用需要写入的目录(上传、缓存)可设为 775,并以 Web 服务器组作为所属组。切勿使用 chmod -R 777。在 FileZilla 中,也可以右键点击文件并选择 文件权限。

5. 可选:被锁定在目录内的纯 SFTP 用户

要让客户只访问某一个目录且没有 shell,请使用 chroot。chroot 目录本身必须属于 root,且不能被其他人写入,否则 sshd 会拒绝登录。

Bash
groupadd sftpusers useradd -M -d /files -s /usr/sbin/nologin -G sftpusers CLIENT passwd CLIENT mkdir -p /var/sftp/CLIENT/files chown root:root /var/sftp/CLIENT chmod 755 /var/sftp/CLIENT chown CLIENT:CLIENT /var/sftp/CLIENT/files

把下面这段添加到 /etc/ssh/sshd_config 末尾:

INI
1Match Group sftpusers 2 ChrootDirectory /var/sftp/%u 3 ForceCommand internal-sftp 4 AllowTcpForwarding no 5 X11Forwarding no

重新加载前先检查语法,并在确认新登录可用之前保持当前 SSH 会话不要关闭。

Bash
sshd -t systemctl reload ssh

该服务在 Ubuntu 和 Debian 上叫 ssh,在 AlmaLinux 和 Rocky 上叫 sshd。受限用户登录后进入 /files,看不到其他任何内容。

验证

在怪罪 FileZilla 之前,先在终端里测试:

Bash
sftp USER@VPS_IP sftp> pwd sftp> put test.txt sftp> ls -l

然后用 FileZilla 上传一个文件,并用 ls -l /var/www/example.com 检查其所有者。

故障排查

  • 连接被拒绝或超时:检查 sshd 是否在运行(systemctl status ssh)、防火墙是否放行了端口,以及你选的是 SFTP 而不是 FTP。
  • Permission denied (publickey):公钥不在 ~/.ssh/authorized_keys 中,或权限不对。用 chmod 700 ~/.ssh 和 chmod 600 ~/.ssh/authorized_keys 修复。
  • chroot 用户登录后立即断开:chroot 目录不属于 root,或组可写。在 journalctl -u ssh 中查找“bad ownership or modes for chroot directory”。
  • 无法上传,目录权限被拒绝:用户不是目标目录的所有者。重新执行第 4 步中的 chown 和 chmod 命令。

✅ 现在你可以用 FileZilla 安全地向 Linux VPS 传输文件了。

及时了解最新的优惠、折扣和特别促销活动。

查看促销

我们使用Cookie

我们使用分析性Cookie来改善您在我们网站上的体验。数据不会出售给第三方。了解更多请查看我们的 隐私政策.