−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS

如何把文件传到 VPS:scp、rsync 和 SFTP

用 scp 在服务器之间来回复制文件,用可断点续传的 rsync 同步大文件夹,或使用 SFTP 客户端;在拥有专属 SSH 端口的 NAT 套餐上同样适用。

迟早都要把文件传到服务器上:网站的构建产物、数据库导出文件、在本地写好的配置。为此你并不需要 FTP 服务器:SSH 已经提供了三个好用的工具。所有示例都使用文档专用地址,请换成你自己服务器的地址。

弄清你的连接信息

scp:复制文件或文件夹

上传一个文件:

scp backup.sql root@203.0.113.10:/root/

下载一个文件:

scp root@203.0.113.10:/var/log/nginx/access.log .

整个文件夹:

scp -r ./site root@203.0.113.10:/var/www/

在 NAT 套餐上,用大写的 -P 指定端口:

scp -P 20123 backup.sql root@your-nat-host:/root/

rsync:同步文件夹的正确工具

rsync 只发送差异部分,显示进度,连接中断后还能继续。两端都需要安装它(apt install -y rsync)。

rsync -avzP ./site/ root@203.0.113.10:/var/www/site/

使用自定义 SSH 端口时:

rsync -avzP -e "ssh -p 20123" ./site/ root@your-nat-host:/var/www/site/

要让目标与源完全一致(同时删除你在本地删掉的文件),就加上 --delete,但请先看看它会做什么:

rsync -avzP --delete --dry-run ./site/ root@203.0.113.10:/var/www/site/

注意末尾的斜杠。 ./site/ 复制的是 site 的内容;./site 则把文件夹本身复制到目标中。用上 --delete 时,这个区别决定了哪个目录会被清空。

SFTP:交互式或图形界面

命令行客户端用起来像一个小型文件管理器:

sftp -P 20123 root@your-nat-host
sftp> put backup.sql
sftp> get /etc/nginx/nginx.conf
sftp> exit

更喜欢图形界面?FileZilla、WinSCP 或 Cyberduck 用同样的信息连接:SFTP 协议、你的主机、端口 22(或你的 NAT 端口)、用户 root,以及你的 SSH 密钥或密码。

用 SSH 密钥更快

这些工具都基于 SSH,所以一把 SSH 密钥就能免去输入密码,还能让你用 cron 自动化传输。还没配置的话:SSH 密钥认证。新的 EQVPS 服务器在你切换到密钥之前接受面板中的 root 密码,我们建议你在第一天就切换。

大文件传输

面对几十 GB 的数据,rsync 是唯一明智的选择:连接一旦中断,重新运行同一条命令,它就会从断开的地方继续。请在发送端机器的 tmux 或 screen 里运行,这样合上笔记本也不会中断传输。

相关

常见问题

scp 和 rsync 有什么区别?

scp 每次都复制全部内容。rsync 会比较两端,只发送有变化的部分,能续传中断的传输,还能镜像一个文件夹。单个文件用 scp 就够了;需要经常同步的文件夹请用 rsync。

怎么使用非标准的 SSH 端口?

scp 和 sftp 用大写的 -P(scp -P 20123),ssh 用小写的 -p,rsync 则这样传入:rsync -e 'ssh -p 20123'。在 EQVPS 的 NAT 套餐上,专属 SSH 端口显示在面板里。

能用图形界面客户端吗?

可以。任何 SFTP 客户端(FileZilla、WinSCP、Cyberduck)都能用与 SSH 相同的主机、端口、用户和 SSH 密钥或密码连接。请选择 SFTP 协议,而不是 FTP。

在 Windows 上能用吗?

Windows 10 和 11 内置了 OpenSSH,所以 scp 和 sftp 在 PowerShell 中的用法和这里完全一样。rsync 没有内置;可以通过 WSL 使用,或者改用 WinSCP 的同步功能。

rsync 里末尾的斜杠是什么意思?

'rsync -a site/ dest/' 会把 site 的内容复制到 dest 中;'rsync -a site dest/' 则会创建 dest/site。搭配 --delete 时如果弄错,可能会清空错误的文件夹,所以请先用 --dry-run 运行一遍。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。