Skip to content

文件传输

两台服务器之间传输文件时,可以在其中一台服务器上使用 scprsync,通过 SSH 连接另一台服务器。

以下示例均在服务器 A 上执行,服务器 B 的地址为 192.0.2.20,登录用户为 root

准备工作

服务器 B 需要运行 SSH 服务,并允许服务器 A 访问 SSH 端口。先测试连接:

bash
ssh root@192.0.2.20

SSH 使用非默认端口时:

bash
ssh -p 2222 root@192.0.2.20

检查本机是否已安装传输工具:

bash
command -v ssh scp rsync

Ubuntu 26、Debian 13 缺少命令时:

bash
apt install openssh-client rsync

CentOS 缺少命令时:

bash
yum install openssh-clients rsync

SCP

scp 适合临时传输单个文件或较小的目录。

从服务器 A 发送到服务器 B

bash
scp /data/example.tar.gz root@192.0.2.20:/data/

传输目录:

bash
scp -r /data/example root@192.0.2.20:/data/

从服务器 B 下载到服务器 A

bash
scp root@192.0.2.20:/data/example.tar.gz /data/

下载目录:

bash
scp -r root@192.0.2.20:/data/example /data/

指定 SSH 端口

scp 的端口参数为大写 -P

bash
scp -P 2222 /data/example.tar.gz root@192.0.2.20:/data/

Rsync

rsync 适合传输大文件、同步目录或重复传输。再次执行时只传输有变化的内容。

从服务器 A 同步到服务器 B

bash
rsync -avh --progress /data/example/ root@192.0.2.20:/data/example/

从服务器 B 同步到服务器 A

bash
rsync -avh --progress root@192.0.2.20:/data/example/ /data/example/

源目录末尾的 / 表示同步目录内的内容;不带 / 表示连同目录本身一起同步。

连接中断后可以重新执行相同命令。需要保留未传完的临时文件时:

bash
rsync -avh --partial --progress /data/example/ root@192.0.2.20:/data/example/

指定 SSH 端口:

bash
rsync -avh --progress -e 'ssh -p 2222' /data/example/ root@192.0.2.20:/data/example/

rsync 需要两台服务器都安装 rsync。不要随意添加 --delete,该参数会删除目标目录中源目录不存在的文件。

校验文件

传输重要文件后,可以分别在两台服务器上计算 SHA-256,结果一致表示文件内容相同:

bash
sha256sum /data/example.tar.gz

目录权限问题

目标用户没有目录写入权限时,可以先传输到 /tmp,再登录目标服务器移动文件:

bash
scp /data/example.tar.gz user@192.0.2.20:/tmp/
ssh user@192.0.2.20
su -
mv /tmp/example.tar.gz /data/

基于 MIT 许可发布