暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

麒麟 Linux|麒麟 Linux|SCP 技术全解析:原理、命令用法与实战指南

安呀智数据坊 2025-09-03
145

注: 本文为安丫科技刘峰的原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

文件传输用什么最稳妥?

Linux 上的 SCP 凭借 SSH 的加密与零配置优势,成为最常用的“搬运神器”。

本文从原理拆解到命令实操,再到常见问题与安全实践,帮你彻底吃透 SCP。


01

 SCP 核心原理:基于 SSH 的

 安全传输  

SCP 并非独立协议,而是依托 SSH 协议实现加密传输的工具,其核心工作流程与安全特性完全依赖 SSH,具体原理如下:


1

 传输流程 

  • 建立 SSH 连接

    SCP 客户端首先与目标主机的 SSH 服务端(默认端口 22)建立 TCP 连接,完成 SSH 的身份认证(密码或密钥认证);

  • 协商加密算法

    认证通过后,SSH 双方协商对称加密算法(如 AES-256)和消息认证算法(如 HMAC-SHA256),后续文件数据均通过协商的加密通道传输;

  • 执行复制操作

    SCP 在加密通道中发送文件元数据(文件名、大小、权限)和二进制数据,目标主机接收后还原为原始文件;

  • 断开连接

    复制完成后,SCP 主动关闭 SSH 连接,释放资源。


2

核心特性

  • 安全性

    继承 SSH 的加密机制,所有数据(包括文件内容、用户名、密码)均经过加密,避免中间人窃听或数据篡改;

  • 易用性

    命令格式简洁,无需额外配置服务,仅需掌握基础参数即可使用;

  • 跨平台性

    支持 Linux、Unix、macOS,Windows 可通过 PuTTY(pscp)、Git Bash、WSL 等环境使用;

  • 完整性

    传输过程中会校验文件校验和,确保文件传输后与原始文件一致(默认开启,无需额外参数)。


02

 SCP 基础命令:语法与核心参数  

SCP 的命令格式分为 "本地→远程" "远程→本地"两种场景,核心参数一致,仅需调整源路径和目标路径的位置。


1

基本语法 

场景 1:本地文件 目录 复制到 远程主机


# 复制文件
scp [参数] 本地文件路径 远程用户@远程主机IP:远程目标路径

# 复制目录(需加-r参数,递归复制)
scp [参数] -r 本地目录路径 远程用户@远程主机IP:远程目标路径


场景 2:远程主机文件 目录 复制到 本地


# 复制文件
scp [参数] 远程用户@远程主机IP:远程文件路径 本地目标路径

# 复制目录(需加-r参数)
scp [参数] -r 远程用户@远程主机IP:远程目录路径 本地目标路径


2

  核心参数说明 

SCP 的参数较少且易用,常用参数如下:


3

SCP 实战示例:覆盖常见使用场景 

结合实际工作中高频场景,通过示例详解 SCP 的具体用法,所有示例基于 "本地主机(192.168.2.45)"和 "远程主机(192.168.2.46,用户 test,SSH 默认端口 22)"环境。


场景 1:本地文件复制到远程主机


需求:将本地/dbsoft/postgresql-18beta3.tar.gz文件复制到远程主机/tmp/目录,保留文件属性。

# 命令
 scp -p dbsoft/postgresql-18beta3.tar.gz test@192.168.2.46:/tmp
test@192.168.2.46's password: 
postgresql-18beta3.tar.gz                                                                         100%   28MB 124.5MB/s   00:00

# 执行过程说明
# 1. 首次连接会验证远程主机指纹,输入"yes”确认;
# 2. 输入远程用户test的密码(若配置SSH免密则无需输入);
# 3. 显示传输进度,完成后退出。

#检查远程主机
ll postgresql-18beta3.tar.gz 
-rw-r--r--. 1 test test 29153087 Sep  1 10:52 postgresql-18beta3.tar.gz


场景 2:远程文件复制到本地


需求:将远程主机/tmp/postgresql-18beta3.tar.gz文件复制到本地 tmp目录,指定 SSH 端口为 2222。

# 命令(注意:-P参数需放在源路径和目标路径前)
scp -P 2222 test@192.168.2.46:/tmp/postgresql-18beta3.tar.gz tmp

test@192.168.2.46's password: 
postgresql-18beta3.tar.gz                                                                         100%   28MB 144.1MB/s   00:00 


场景 3:本地目录递归复制到远程


需求:将本地/home/postgres/目录(含子目录和文件)复制到远程主机/tmp/目录,启用压缩传输。

# 命令(必须加-r参数,-C启用压缩)
scp -r -C home/postgres/ test@192.168.2.46:/tmp

# 说明:传输目录时,若远程目标路径不存在,会自动创建;若存在,会将本地目录复制到该路径下。


 场景 4:远程目录复制到本地


需求:将远程主机/home/test目录复制到本地/tmp目录,使用 SSH 密钥认证(免密)。

# 前提:本地已生成SSH密钥对,并将公钥上传到远程主机(ssh-copy-id test@192.168.2.46
# 命令(-i指定私钥路径)
scp -r -i ~/.ssh/id_rsa test@192.168.2.46:/home/test tmp


场景 5:静默模式复制(适合脚本)


需求:在自动化脚本中,将本地/home/user/data.csv文件复制到远程主机,不显示传输进度(避免干扰脚本输出)。

# 命令(-q启用静默模式)
scp -q dbsoft/postgresql-18beta3.tar.gz test@192.168.2.46:/tmp
# 说明:静默模式下仅在出错时输出错误信息,成功时无任何输出,适合crontab定时任务或批量脚本。


04

 SCP 常见问题与解决方案  

SCP 使用中可能遇到连接失败、传输中断、权限报错等问题,多数与 SSH 配置、路径权限或网络相关,以下是高频问题及排查方法。


问题 1:连接失败(Connection refused)


现象

scp local.txt test@192.168.2.46:/home/test/
ssh: connect to host 192.168.2.46 port 22: Connection refused
lost connection


可能原因与解决

1)远程主机 SSH 服务未启动登录远程主机,执行systemctl start sshd启动服务;

2)SSH 端口错误:若远程主机修改了 SSH 端口(如 2222),需用-P参数指定,如scp -P 2222 local.txt ...;

3)防火墙拦截:远程主机防火墙(firewalld/iptables)未开放 SSH 端口,执行firewall-cmd --add-port=22/tcp --permanent && firewall-cmd --reload开放端口。


问题 2:权限拒绝(Permission denied)


现象

scp local.txt test@192.168.2.46:/root/
scp: root/local.txt: Permission denied


可能原因与解决

1)远程目标路径权限不足

普通用户(如 test)无权限写入/root/目录,需更换目标路径(如/home/test/),或使用 root 用户登录(需远程主机允许 root SSH 登录);

2)本地文件权限不足

本地文件仅所有者可读(如权限 600),且执行 SCP 的用户非文件所有者,需修改本地文件权限(如chmod 644 local.txt)。


问题 3:无法复制目录(not a regular file)


现象

scp home/user/project/ test@192.168.2.46:/home/test/
scp: home/user/project/: not a regular file


原因与解决

未加-r参数(递归复制),SCP 默认仅复制文件,复制目录必须加-r,正确命令:

scp -r home/user/project/ test@192.168.2.46:/home/test/


问题 4:传输中断(大文件或弱网络)


现象

传输大文件(如 10GB)时,因网络波动导致传输中断,需重新开始。


解决方法

SCP 不支持断点续传,若需断点续传,可改用rsync工具(基于 SSH,支持断点续传),命令示例:

# rsync断点续传远程目录到本地(--partial支持断点,-P显示进度)
rsync -avz --partial -e "ssh -p 22" test@192.168.2.46:/home/test/large_dir/ /home/user/local_dir/


05

 SCP 与其他工具对比:

 适用场景选择  

Linux 下文件传输工具较多,除 SCP 外,还有rsync、SFTP等,需根据场景选择合适工具,以下是核心对比:


结论

  • 简单的一次性文件 / 目录复制用 SCP;

  • 大文件或需增量同步用 rsync;

  • 手动交互式管理文件用 SFTP。


06

 SCP 安全最佳实践  

SCP 依托 SSH 的安全性,但需配合合理配置才能最大化安全,以下是生产环境中的最佳实践:

1)禁用密码认证,仅用密钥认证:

  • 远程主机修改/etc/ssh/sshd_config,设置PasswordAuthentication no,避免密码泄露风险;

  • 本地生成 SSH 密钥对(ssh-keygen -t rsa -b 4096),用ssh-copy-id上传公钥到远程主机。

2)修改 SSH 默认端口:

  • 远程主机修改sshd_config的Port为非 22 端口(如 2222),减少端口扫描攻击,SCP 使用时需加-P 2222参数。

3)限制 SCP 使用用户:

  • 远程主机通过sshd_config的AllowUsers配置,仅允许指定用户(如 test)使用 SSH(含 SCP),示例:AllowUsers test admin。

4)避免传输敏感文件明文:

  • 若传输密码、密钥等敏感文件,建议先压缩加密(如zip -e sensitive.zip sensitive.txt),再用 SCP 传输,双重保障。


写在最后


SCP 的优势可以用 8 个字概括:
“零配置,开箱即用”。

  • 想快速传个文件?用 SCP;

  • 要断点续传、大规模同步?配合 rsync;

  • 临时文件管理?上 SFTP。

只要 SSH 通了,SCP 就能跑。

掌握它,你不仅能少走弯路,还能快速进阶到 自动化运维 / 批量部署 的更高层次 。

作者介绍

大家好,我是刘峰,安丫科技创始人 & 数据库技术高级讲师,专注于 PostgreSQL、国产数据库运维与迁移、数据库性能优化 等方向。

作为 PG中国分会官方授权讲师、PostgreSQL ACE 讲师认证专家,我长期活跃在一线项目实战中,拥有 10年以上大型数据库管理与优化经验,曾深度参与电信、金融、政务等多个行业的数据库性能调优与迁移项目。

欢迎关注我,一起深入探索数据库的无限可能,技术交流不设限!

📌 觉得有收获的话,记得点赞、收藏、转发支持一下哦,别忘了关注我获取更多数据库干货~


END

关键词回复(可见相应文章):

oracle、mysql、pg、postgresql、sql、性能优化、故障处理、数据迁移、备份恢复、版本升级、补丁管理、深度巡检、解决方案、架构设计......

小助手

有任何问题或疑问,欢迎加V进群探讨哦~


\ | /

动动你的手指

【安呀智数据坊】加个星标吧~

这样你就不会丢下我啦~

记得加星标呀!

文章转载自安呀智数据坊,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论