scp基于SSH加密传输,rcp明文传输且服务默认禁用;只要能SSH登录就能用scp,无需额外配置,而rcp因安全缺陷已被淘汰。

scp 是你现在该用的命令,rcp 已淘汰且默认禁用。
为什么不用 rcp 而用 scp
rcp 传输不加密,账号、密码、文件内容全在明文跑,现代 Linux 发行版基本已移除或禁用。SSH 服务默认开启,scp 复用它,认证和传输全程加密,无需额外配置。
常见错误现象:rcp: Command not found 或 Connection refused —— 不是路径写错,是服务压根没开,也不该开。
-
scp依赖sshd,只要能ssh user@host登录,就能用scp -
rcp依赖rsh/rexec,这些服务在主流发行版中默认关闭,且无维护更新 - 即使强行启用
rcp,Kerberos 或 DES 加密(-k/-x)也早已被证明不安全
scp 复制单个文件最简写法
从本地传到远程:
scp /path/to/file.txt user@192.168.1.20:/home/user/
从远程拉回本地:
scp user@192.168.1.20:/var/log/app.log ./
- 目标路径末尾是
/,表示复制进该目录;没有/则视为重命名(如./app.log.bak) - 如果远程端口不是 22,必须用大写
-P指定:scp -P 2222 file user@host:/tmp - 若提示
Permission denied (publickey),说明远程只接受密钥登录,需加-i ~/.ssh/id_rsa
scp -r 复制整个目录要注意什么
-r 是递归,但行为容易误解:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
scp -r ./myapp/ user@host:/opt/
这会把 myapp/ 目录本身(含子目录)复制到 /opt/myapp/;而
scp -r ./myapp/* user@host:/opt/
只会复制 myapp/ 下的内容(不含 myapp 这层目录)。
- 路径末尾的
/对scp -r很关键:./myapp/和./myapp效果不同 - 大目录传输时加
-C开启压缩(CPU 换带宽),但小文件可能反而变慢 - 不要用
scp -r同步增量更新——它每次都是全量覆盖,rsync -avz -e "ssh -p 2222"才适合
跨服务器中转复制(A → B → C)的实用技巧
不能直接 scp userA@A:/f userC@C:/d,scp 不支持三方跳转。正确做法是:先从 A 拉到本地临时目录,再推到 C;或者用 SSH 隧道或 ProxyJump 配置。
快速中转(免存本地):
ssh userA@A 'cat /data/config.yaml' | ssh userC@C 'cat > /etc/config.yaml'
- 注意权限:管道方式不保留时间戳和权限,仅适合文本或小文件
- 二进制文件(如 tar 包)必须加
ssh ... 'cat - | base64 -w0'再解码,否则易损坏 - 真正要保属性、断点续传、限速,还是得用
rsync,scp只解决“能传过去”这个最基本问题
真正容易被忽略的是:当你在脚本里反复调用 scp 时,每次都会新建 SSH 连接,认证开销明显。如果批量操作,优先配好 ~/.ssh/config 的 ControlMaster,或直接切到 rsync。

















