# 文件上传下载：优先使用 SFTP 或 SCP

SFTP 与 SCP 通过 SSH 传输，使用的端口和认证方式与 SSH 对应。它们和传统 FTP 的协议、端口及安全配置不同。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/files-transfer/

## 1. 上传网站文件优先使用 SFTP

SFTP 通过 SSH 传输文件，与 FTP、FTPS 是不同协议。既然已经能 SSH 登录，通常不必为了上传文件再安装一个 FTP 服务。先准备公网 IP、SSH 端口、Linux 用户名和密钥或密码。

![从实例面板核对文件传输要使用的 IP 和 SSH 端口](https://stock.iftalking.com/tutorial-media/provider-kiwivm-overview.jpg)

*图示说明：服务商官方知识库公开截图（旧版界面），用于对照功能名称；当前菜单位置可能调整。图中的套餐、IP、端口和日期仅为示例。*

在 WinSCP、FileZilla 或 Termius 中新建连接时，协议选 SFTP，端口使用实际 SSH Port，不能因为软件叫 FTP 客户端就选择普通 FTP。第一次连接同样要核对主机密钥指纹。

## 2. 先上传到普通用户目录

建议先把文件上传到自己的暂存目录，例如 `/home/deploy/uploads/`，检查内容后再通过 sudo 安装到网站目录。不要为了方便把整个网站目录改成 777，也不要用 root 账户给多人共享上传。

图形客户端通常左侧是本地、右侧是服务器。先创建一个小文本文件试传，下载回来确认内容一致，再传正式文件。覆盖已有文件前保留上一版本，尤其是环境变量、配置和证书文件。

## 3. 命令行使用 SCP 或 SFTP

以下命令在本地电脑执行。SCP 指定端口用大写 `-P`，与 SSH 的小写 `-p` 不同。

```bash
scp -P 22 ./site.tar.gz deploy@203.0.113.10:/home/deploy/uploads/
scp -P 22 deploy@203.0.113.10:/home/deploy/backup.sql ./backup.sql
sftp -P 22 deploy@203.0.113.10
```

交互式 SFTP 中，`pwd`/`ls` 查看远端，`lpwd`/`lls` 查看本地，`put` 上传，`get` 下载，`bye` 退出。大文件中断后可查看客户端是否支持续传，避免从头反复消耗流量。

## 4. 大目录同步先做 dry-run

两端有 rsync 时，可以增量同步。先预演并检查目标目录；源路径末尾的斜线表示同步目录内容，其含义与不带斜线不同。

```bash
rsync -av --dry-run -e 'ssh -p 22' ./site/ deploy@203.0.113.10:/home/deploy/site-staging/
rsync -av -e 'ssh -p 22' ./site/ deploy@203.0.113.10:/home/deploy/site-staging/
```

不要初次同步就加 `--delete`，它会删除目标中源端没有的文件。数据库正在运行的数据目录也不适合直接 rsync 当作一致性备份，应先做数据库导出。

## 5. 核对完整性、权限和实际访问

```bash
sha256sum site.tar.gz
```

在上传前后各算一次校验值，确认一致。解压前用 `tar -tzf site.tar.gz` 查看路径，解压到独立目录，避免覆盖系统文件。然后按照应用要求设置所有者和最小权限。

如果上传成功但网页 403，检查 Web 服务用户是否能遍历父目录和读取文件；如果 SFTP 连接失败，按[SSH 排错](https://stock.iftalking.com/guides/ssh-login/)检查认证与端口。部署和恢复前的完整流程见[备份与恢复](https://stock.iftalking.com/guides/backup-restore/)。


## 完成后检查

含数据库的应用要做一致性备份，直接复制运行中的数据库目录不能保证可恢复。

## 参考资料

- [Ubuntu 官方文档](https://ubuntu.com/server/docs/how-to/security/openssh-server/)
- [服务商官方说明](https://bandwagonhost.com/kb.php?action=displayarticle&id=30)
