scp 完整详细使用教程

scp 完整详细使用教程

scp 基于ssh协议安全拷贝文件,语法:

plaintext

scp [可选参数] 源文件 目标地址

端口参数注意:

– ssh 小写 -p 指定端口

– scp 大写 -P 指定端口,极易混淆

一、常用参数清单

参数 作用

-r 递归复制整个目录(文件夹必须加)

-P port 指定ssh端口,大写P

-p 保留文件原有权限、修改时间

-C 开启压缩传输,大文件提速

-v 打印详细日志,排错调试

-q 静默模式,不输出进度

-l 限速值 限制带宽,单位KB/s

二、四大核心场景语法

场景1:本地文件 → 上传到远程服务器

格式:

bash

scp 本地路径 用户名@远程IP:远程路径

示例:

bash

# 单个文件上传

scp /opt/app.tar.gz root@192.168.2.10:/data/

# 上传整个文件夹,必须加 -r

scp -r /opt/myfile root@192.168.2.10:/data/

场景2:远程文件 → 下载到本地

格式:

bash

scp 用户名@远程IP:远程文件路径 本地保存路径

示例:

bash

# 下载单个文件到本地当前目录

scp root@192.168.2.10:/data/app.tar.gz ./

# 下载远程文件夹到本地

scp -r root@192.168.2.10:/data/logs /home/local/

场景3:非默认SSH端口(22以外)

服务器ssh端口改为 2345,使用大写 -P :

bash

# 上传带端口

scp -P 2345 local.zip root@192.168.2.10:/tmp/

# 下载带端口

scp -P 2345 root@192.168.2.10:/tmp/local.zip ./

场景4:两台远程服务器之间互传(A服务器直接发给B服务器)

你在本地电脑执行,让服务器A把文件发给服务器B:

bash

scp root@A_IP:/data/file.tar root@B_IP:/backup/

注意:需要A服务器可以连通B服务器,或者本机同时能ssh两台机器。

三、进阶实用用法

1. 保留文件原始属性(时间、权限)

bash

scp -rp /test root@192.168.2.10:/data

2. 传输时开启压缩,外网大文件提速

bash

scp -Cr 本地大文件夹 root@IP:/target

3. 限制传输速度,防止占满带宽

限制速度为 1024KB/s(1MB/s)

bash

scp -l 1024 big.iso root@192.168.2.10:/tmp

4. 调试排错:-v 输出详细过程

连接失败、握手异常时使用:

bash

scp -vP 2345 test.txt root@192.168.2.10:/tmp

5. 使用通配符批量传输多个文件

需要用引号包裹通配符,避免本地shell解析:

bash

# 下载远程所有 .log 文件到本地

scp root@192.168.2.10:”/var/log/*.log” ./logs/

四、配合ssh免密登录(彻底不用输密码)

1. 本地生成ssh密钥对

bash

ssh-keygen

# 一路回车,不设置密码即可免密

2. 把公钥推送到远程服务器

bash

ssh-copy-id -P 2345 root@192.168.2.10

之后所有scp、ssh操作都不再需要输入密码。

五、常见坑与报错解决

1. 报错:Permission denied

– 远程目标目录没有写入权限,换到 /tmp 测试,或者chmod修改目录权限。

2. 端口错误:连接超时

scp 必须用大写 -P ,许多人误用小写 -p 导致连不上。

3. 拷贝文件夹忘记加 -r

会提示 not a regular file,目录传输强制带上 -r 。

4. 目标路径带空格

需要用双引号把远程路径括起来。

六、替代方案:rsync(比scp更适合增量同步)

scp每次全量覆盖,rsync只传输变更文件,推荐日常备份:

bash

# 增量上传

rsync -avzP -e “ssh -p2345” 本地目录 root@IP:/远程目录

© 版权声明

相关文章

1 条评论

none
暂无评论...