游乐游手机版
首页/编程语言/文章详情

Linux scp命令详解:SSH远程文件复制指南

时间:2026-07-24 21:33
scp是SecureCopy的缩写,通过SSH协议在本地与远程主机间安全加密复制文件,支持密钥认证、端口指定、限速等功能。所有传输数据均加密,是替代rcp的标准工具,但大文件或断点续传场景推荐使用rsync。

scp 命令快速参考

scp(Secure Copy 的缩写)是一款基于 SSH 协议的安全文件复制工具,能够在本地与远程主机之间加密传输数据。它最大的优势在于所有传输内容(包括密码和文件)均经过加密保护,因此成为替代不安全的 rcp 的标准方案。只要 SSH 连接可用,scp 即可正常工作,同时支持密钥认证、自定义端口、带宽限制等实用功能,足以应对日常大多数文件传输需求。

Linux命令scp详解(通过SSH远程复制文件)

核心优势:安全加密、基于 SSH、操作简便。但对于大文件传输或需要断点续传的场景,rsync 通常是更优的选择。

scp 基本语法格式

# 基本语法
scp [选项] 源 目标
# 本地 → 远程
scp local_file user@remote:/path/
# 远程 → 本地
scp user@remote:/path/file ./
# 远程 → 远程
scp user1@host1:/path/file user2@host2:/path/
# 复制目录
scp -r local_dir/ user@remote:/path/

scp 安装方法详解

# scp 是 OpenSSH 的一部分,通常已预装
sudo apt install openssh-client   # Debian/Ubuntu
sudo yum install openssh-clients  # RHEL/CentOS
# 验证安装
which scp
scp -h

scp 常用选项及参数说明

# -r  递归复制目录
scp -r directory/ user@remote:/path/
# -P 端口  指定远程 SSH 端口(注意是大写 P)
scp -P 2222 file.txt user@remote:/path/
# -i 密钥  指定 SSH 私钥文件
scp -i ~/.ssh/id_rsa file.txt user@remote:/path/
# -l 限速  限制带宽(单位 Kbit/s)
scp -l 8000 file.txt user@remote:/path/   # 约 1MB/s
# -C  启用压缩(适合慢速网络)
scp -C large_file.tar.gz user@remote:/path/
# -p  保留文件原始属性(权限、时间戳等)
scp -p file.txt user@remote:/path/
# -q  安静模式(不显示进度条)
scp -q file.txt user@remote:/path/
# -v  调试模式(显示详细连接过程)
scp -v file.txt user@remote:/path/
# -B  批处理模式(不询问密码)
scp -B file.txt user@remote:/path/
# -o 选项  传递 SSH 选项
scp -o "StrictHostKeyChecking=no" file.txt user@remote:/path/

scp 本地到远程文件复制

# 复制单个文件
scp file.txt user@192.168.1.100:/home/user/
# 复制并指定端口
scp -P 2222 file.txt user@192.168.1.100:/home/user/
# 复制目录
scp -r project/ user@192.168.1.100:/home/user/
# 使用密钥认证
scp -i ~/.ssh/id_rsa file.txt user@192.168.1.100:/home/user/
# 复制多个文件
scp file1.txt file2.txt file3.txt user@192.168.1.100:/home/user/
# 使用通配符
scp *.log user@192.168.1.100:/var/log/
# 保留文件属性
scp -p file.txt user@192.168.1.100:/home/user/
# 限速传输
scp -l 4000 large_file.iso user@192.168.1.100:/home/user/

scp 远程到本地文件复制

# 复制单个文件
scp user@192.168.1.100:/home/user/file.txt ./
# 复制目录
scp -r user@192.168.1.100:/home/user/project/ ./
# 指定端口和密钥
scp -P 2222 -i ~/.ssh/id_rsa user@192.168.1.100:/home/user/file.txt ./
# 复制并重命名
scp user@192.168.1.100:/home/user/file.txt ./new_name.txt
# 从远程复制多个文件(需要引号)
scp "user@192.168.1.100:/home/user/{file1.txt,file2.txt}" ./

scp 远程到远程文件复制

# 在两台远程主机之间复制
scp user1@host1:/path/file user2@host2:/path/
# ⚠️ 注意:数据会经过本地中转
# 如果要直接在两台主机间传输(不经过本地),使用 -3 选项
scp -3 user1@host1:/path/file user2@host2:/path/

配置 SSH 简化 scp 命令操作

# 编辑 ~/.ssh/config
cat >> ~/.ssh/config << 'EOF'
Host server1
    HostName 192.168.1.100
    User myuser
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
EOF
chmod 600 ~/.ssh/config
# 现在可以简化命令
scp file.txt server1:/home/user/
scp -r project/ server1:/home/user/

scp 与 rsync 对比分析

# === scp:简单直接 ===
# 优点:简单、安全、不需要额外配置
# 缺点:不支持断点续传、不支持增量传输、大文件传输慢
scp large_file.iso user@remote:/path/
# === rsync:功能强大 ===
# 优点:增量传输、断点续传、压缩、限速、删除同步
# 缺点:命令稍复杂
rsync -a vzP large_file.iso user@remote:/path/
# === 选择建议 ===
# 简单场景(少量文件、小文件):用 scp
# 复杂场景(大量文件、大文件、需要断点续传):用 rsync
# 备份场景:用 rsync
# 临时复制:用 scp

scp 常见故障排查方法

# 问题1:scp 报错 "Permission denied"
# 解决:检查远程目录权限
ssh user@remote "ls -la /path/"
# 问题2:scp 报错 "No route to host"
# 解决:检查网络连通性
ping remote_host
nc -zv remote_host 22
# 问题3:大文件传输中断
# 解决:使用 rsync 的断点续传
rsync -a vzP --partial large_file.iso user@remote:/path/
# 问题4:scp 很慢
# 解决:启用压缩或限速
scp -C file.txt user@remote:/path/

scp 命令总结与最佳实践

核心价值scp 是日常使用最广泛的安全远程文件复制工具,兼具简单、安全、基于 SSH 等优势。

常用组合

  • scp file user@host:/path/:将本地文件复制到远程服务器
  • scp user@host:/path/file ./:从远程服务器下载文件到本地
  • scp -r dir/ user@host:/path/:递归复制整个目录到远程
  • scp -P 2222 -i key file user@host:/path/:指定端口和密钥进行安全传输

最佳实践

  1. 通过配置 ~/.ssh/config 简化连接操作
  2. 传输大文件时优先使用 rsync -a vzP 替代
  3. 注意 -P(大写)用于指定端口(不是小写 -p
  4. 处理敏感文件时务必使用密钥认证
来源:https://www.jb51.net/jiaoben/367709w0x.htm
上一篇高效实现超大规模Pandas数据框模糊匹配与合并 下一篇Python异常处理案例入门与自定义异常全解析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
FileZilla断点续传设置与操作指南
编程语言 · 2026-07-25

FileZilla断点续传设置与操作指南

FileZilla支持断点续传,需客户端与服务器均开启REST命令。设置中确保启用断点续传及继续传输选项。中断后自动或手动从断点恢复。注意服务器支持、传输模式匹配及文件完整性校验。

Debian系统C++编译器位置查找方法
编程语言 · 2026-07-25

Debian系统C++编译器位置查找方法

在Debian系统中,通过apt安装的C++编译器g++默认位于 usr bin g++,可使用which或whereis命令验证路径。g++属于build-essential软件包,若未安装则需执行sudoaptinstallbuild-essential。该包还包含gcc、make等编译工具链,g++是GNUC++编译器,实际是符号链接指向具体版本,验证

Debian系统安装C++环境的方法
编程语言 · 2026-07-25

Debian系统安装C++环境的方法

在Debian系统安装C++开发环境:先sudoaptupdate更新包列表,再sudoaptinstallbuild-essential安装编译工具链,或单独安装g++。用g++--version验证。可选安装VSCode、GDB、CMake等工具并配置默认编译器版本。

Debian系统C++开发环境配置指南
编程语言 · 2026-07-25

Debian系统C++开发环境配置指南

在Debian系统中,先执行aptupdate更新软件包列表,再安装build-essential元包即可获得GCC、G++、Make和GDB。通过运行g++--version命令验证编译器安装成功。可选安装VisualStudioCode、CLion等编辑器及CMake构建工具,并编写一个简单的HelloWorld程序,使用g++编译运行以验证环境配置正确

通过cpustat工具查看CPU状态的具体方法与详细步骤
编程语言 · 2026-07-25

通过cpustat工具查看CPU状态的具体方法与详细步骤

cpustat是sysstat包中的CPU监控工具,可按固定间隔输出带时间戳的CPU使用率统计。安装后运行cpustat即可实时显示各核心信息,常用指标包括%usr、%sys、%iowait、%steal和%idle,用于定位用户态、内核态或I O瓶颈。高级选项-c可显示单核统计,-m可同时查看内存使用,适合脚本采集和性能分析。