主题
文件传输
两台服务器之间传输文件时,可以在其中一台服务器上使用 scp 或 rsync,通过 SSH 连接另一台服务器。
以下示例均在服务器 A 上执行,服务器 B 的地址为 192.0.2.20,登录用户为 root。
准备工作
服务器 B 需要运行 SSH 服务,并允许服务器 A 访问 SSH 端口。先测试连接:
bash
ssh root@192.0.2.20SSH 使用非默认端口时:
bash
ssh -p 2222 root@192.0.2.20检查本机是否已安装传输工具:
bash
command -v ssh scp rsyncUbuntu 26、Debian 13 缺少命令时:
bash
apt install openssh-client rsyncCentOS 缺少命令时:
bash
yum install openssh-clients rsyncSCP
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/