从另一台服务器取文件,最推荐使用 scp 或 rsync 命令,安全且高效;如果目标服务器有 Web 服务,也可以直接用 wget 下载。
linux从另一台服务器取文件命令详解
远程取文件是运维的日常操作,选择正确的命令能省下不少时间,下面按场景列出最常用的几个工具,每个都附上具体用法。
scp:简单安全的加密传输
scp 基于 SSH,无需额外配置,适合小文件或一次性拷贝,格式为 scp user@源IP:路径 本地路径。
- 拉取单个文件:
scp root@192.168.1.100:/var/log/nginx/access.log ./ - 拉取整个目录:
scp -r root@192.168.1.100:/data/config ./local_config - 指定端口:
scp -P 2222 root@192.168.1.100:/file ./
scp 的优点是命令简单,缺点是不支持断点续传,大文件中断后需重传。
rsync:增量同步,大文件首选
rsync 能对比源和目标差异,只传输变化部分,支持断点续传,非常适合重复同步或大量数据,常用参数 -avzP(归档、压缩、显示进度、部分传输)。
- 基础拉取:
rsync -avzP root@192.168.1.100:/data/backup/ /local/backup/ - 保持文件属性:
rsync -avzP --owner --group --perms root@192.168.1.100:/data/ /local/ - 排除指定目录:
rsync -avzP --exclude='cache' root@192.168.1.100:/app/ /local/app/
业内专家指出,rsync 的增量机制在备份场景中尤其实用,能减少带宽占用。
wget 和 curl:从 HTTP 服务拉取
如果目标服务器跑着 Nginx 或 Apache,直接下载文件更省事。
- wget:
wget -O myfile.zip http://192.168.1.100/files/package.zip - curl:
curl -o myfile.zip http://192.168.1.100/files/package.zipwget 支持递归下载目录,但注意要确保目标服务器有相应权限。
sftp:交互式文件传输
sftp 也走 SSH,适合需要浏览远端目录后再取文件的场景。
- 连接:
sftp root@192.168.1.100 - 进入后使用
get remote_file ./拉取,exit退出。
交互式操作虽然直观,但脚本化不如 scp 和 rsync。
命令选择速查表
| 命令 | 场景 | 是否加密 | 断点续传 | 增量同步 |
|---|---|---|---|---|
| scp | 一次性、小文件 | 是 | 否 | 否 |
| rsync | 大量数据、重复同步 | 是 | 是 | 是 |
| wget | HTTP 直链下载 | 可选 | 是 | 否 |
| sftp | 需交互浏览 | 是 | 否 | 否 |
两台服务器之间传输文件:scp 和 rsync 哪个好
这是新手最常问的问题,两者都基于 SSH,安全等级相同,但设计思路不同。选择的关键在于文件大小和传输频率。
一次性传几个小文件,scp 更快
scp 不比较文件差异,直接全部拷贝,几十 MB 以下的小文件用 scp 更省心,命令写起来也短,适合临时手动操作。
频繁同步或大文件,rsync 完胜
rsync 第一次会全量同步,后续只传输变化的部分,据统计,日均增量数据同步的场景中,rsync 能节省 70% 以上传输量,超大文件(如数据库备份)中断后,rsync 可以续传,而 scp 只能重头再来。
实际测试对比
- 速度:小文件(<10MB)scp 略快;大文件(>1GB)且多次传输,rsync 优势明显。
- 资源占用:scp 几乎不消耗额外 CPU;rsync 在比对阶段会占用少量 CPU,但现代服务器基本无感。
- 安全性:两者底层都是 SSH 连接,加密强度一致。
- 易用性:scp 参数更少,上手更快;rsync 参数多,但掌握
-avzP四个常用组合已足够。
行业共识认为,日常运维脚本中 rsync 出场率更高,因为它的错误处理和断点续传能力让自动化更可靠。
免密登录和特殊端口配置
无论用 scp 还是 rsync,避免每次输入密码能大幅提升效率。
设置 SSH 密钥
- 在本地生成密钥对:
ssh-keygen -t rsa -b 4096 - 将公钥复制到目标服务器:
ssh-copy-id root@192.168.1.100 - 测试:
ssh root@192.168.1.100不再提示密码即可。
设置后,scp 和 rsync 也会自动使用密钥认证,无需额外参数。
处理非标准端口
如果目标服务器 SSH 端口不是默认的 22,scp 和 rsync 通过 -P 指定端口:
- scp:
scp -P 2222 root@192.168.1.100:/file ./ - rsync:
rsync -avzP -e 'ssh -p 2222' root@192.168.1.100:/dir/ /local/
注意 rsync 的写法需要-e参数传递 SSH 命令。
linux 远程拉取文件到本地的方法总结
拉取文件的本质是建立网络连接,选择哪种方式取决于两个因素:目标服务器开放了什么服务 和 文件的大小与更新频率。
- 目标开放 SSH(最通用)→ 用 scp 或 rsync
- 目标开放 HTTP → 用 wget 或 curl
- 需要交互式浏览 → 用 sftp
- 需要自动化周期同步 → 用 rsync 配合 crontab
一个完整的脚本示例
下面是一个自动拉取远程日志并保留最近 7 天数据的脚本:
#!/bin/bash
REMOTE="root@192.168.1.100"
REMOTE_DIR="/var/log/nginx"
LOCAL_DIR="/backup/nginx_logs"
rsync -avzP --delete-after --backup --backup-dir="$LOCAL_DIR/backup-$(date +%Y%m%d)"
"$REMOTE:$REMOTE_DIR/" "$LOCAL_DIR/current/"
find "$LOCAL_DIR" -type d -name "backup-" -mtime +7 -exec rm -rf {} +
这个脚本先同步最新日志到当前目录,再用 --backup 保留旧版本,最后清理 7 天前的备份。粘贴使用时注意替换自己的 IP 和路径。
linux 从另一台服务器取文件的几个问题
问题1:从另一台服务器取文件时如何避免每次输入密码
使用 SSH 密钥认证,生成密钥对后,执行 ssh-copy-id user@server 将公钥写入目标服务器的 authorized_keys 文件,之后所有基于 SSH 的传输(scp、rsync、sftp)都自动免密。
问题2:scp 和 rsync 在传输大文件时哪个更稳定
rsync 更稳定,它支持断点续传,传输中断后重新运行命令会自动从断点处继续,scp 如果中断,只能从头开始传输整份文件,对于 GB 级以上的数据库备份或视频文件,rsync 是更可靠的选择。
问题3:如果目标服务器没有公网 IP,怎么取文件
可以通过跳板机(堡垒机)转发,使用 -J 参数(需要 OpenSSH 7.3+):scp -J user@跳板机 user@目标:/file ./,rsync 同样支持 -e ssh -J 组合,跳板机本身不需有文件,只负责转发 SSH 连接。
无论你选择 scp 还是 rsync,结合 SSH 密钥认证都能稳定、安全地从另一台服务器取文件,根据文件大小和传输频率做决定,就能避免踩坑。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/589730.html




