Linux scp 命令详解

1. 概述

SCP命令是Secure Copy的缩写,它是一个用于在本地计算机和远程计算机之间进行文件传输的命令行工具。这个命令基于SSH(Secure Shell)协议,提供了加密和安全的文件传输功能。与其他安全传输协议对比:

2. SCP命令完全解析

2.1 命令结构解剖

SCP命令的基本语法如下:

scp [选项] 源文件 目标路径

其中,源文件可以是本地文件路径或远程主机文件路径,目标文件路径也可以是本地文件路径或远程主机文件路径。

使用示例:

1. 从本地主机复制文件到远程主机:

scp local_file remote_username@remote_ip:remote_folder

例如,将本地的test.txt文件复制到远程主机10.20.30.31的/home/user/目录下:

scp test.txt user@10.20.30.31:/home/user/

2. 从远程主机复制文件到本地主机:

scp remote_username@remote_ip:remote_file local_folder

例如,将远程主机10.20.30.31的/home/user/test.txt文件复制到本地当前目录下:

scp user@10.20.30.31:/home/user/test.txt

2.2 核心选项详解表

SCP命令允许用户通过安全的SSH连接,在本地和远程系统之间复制文件或目录。这意味着,即使在传输过程中数据被截获,它仍然受到SSH协议提供的加密保护。

注意事项:

• 在使用SCP命令时,请确保远程主机的SSH服务已经启动,并且可以通过指定的用户名和密码或私钥文件进行身份验证。

• 如果需要传输的文件或目录较大,可能会花费较长的时间,请耐心等待。

• 在传输敏感数据时,请确保使用安全的网络连接,并尽量避免在公共网络上进行文件传输。

总的来说,SCP命令是一个强大且安全的文件传输工具,特别适用于在Linux系统之间进行文件传输。通过掌握其基本语法和常用选项,用户可以轻松地在本地和远程系统之间复制文件或目录。

3. 实战示例大全

3.1 基础文件传输

# 本地→远程
scp invoice.pdf user@server:/home/user/documents/
 
# 远程→本地
scp user@server:/var/log/app.log ./logs/
 
# 远程→远程
scp user1@server1:/data/file.txt user2@server2:/backup/

3.2 高级应用场景

场景1:迁移整个网站目录

scp -rpC -P 2222 /var/www/html/ admin@newserver:/var/www/
参数解析:-r递归 -p保留属性 -C压缩 -P指定端口

场景2:受限带宽传输大文件

scp -l 5120 bigdata.tar.gz user@server:/data/
# 限制带宽为5Mbps (5120 kbit/s)

场景3:使用非标准密钥连接

scp -i ~/.ssh/custom_id_rsa -P 3222 secret_file.db user@secureserver:/vault/

场景4:加速大文件传输(性能优化)

# 启用压缩(适合文本文件)
scp -C source.log user@server:/logs/
 
# 并行传输(结合GNU Parallel)
parallel -j 4 scp {} user@server:/data/ ::: part*.tar

场景5:断电续传(性能优化)

# 使用rsync替代SCP(支持断点续传)
rsync -Pavz -e "ssh -p 22" largefile.iso user@server:/backup/

4. 安全加固策略

4.1 密钥认证最佳实践(配置SSH免登陆)

 

登录验证流程:

1.客户端发起连接:ssh user@server 命令触发连接请求。

2.服务器发送挑战:生成随机字符串,用客户端的公钥加密后发送给客户端。

3.客户端解密挑战:用本地私钥解密字符串,生成数字签名并回传服务器。

4.服务器验证签名:

    • 用存储的公钥验证签名是否匹配:
      • 匹配 → 认证成功,允许登录;
      • 不匹配 → 认证失败。
    • 验证客户端发送随机字符串和服务端生成随机字符串是否一致。

5.  替代方案

5.1 SCP vs Rsync

5.2 不同场景选择建议

6.  企业应用案例

需求:基础设施网络限制最大文件传输大小为1G,现在需要将远端服务器上的engine-858768cc9c-gswdr-%t-jvm.hprof文件(7.6G)下载到本地。

实现:先在远端服务器上将文件切割成8份,然后在本地通过scp命令下载切割后的文件,然后再合并文件。

1.服务器切割文件

# 将大文件分割成每个 1GB 的片段(按需调整大小)
split -b 1G engine-858768cc9c-gswdr-%t-jvm.hprof  engine-part- 
# 检查生成的分片文件 
ls -lh engine-part-*

2.本地scp批量下载

scp username@server_ip:/path/to/files/engine-part-* .

3.本地合并

cat engine-part-* > engine-858768cc9c-gswdr-%t-jvm.hprof  
posted @ 2025-07-18 08:56  人艰不拆_zmc  阅读(292)  评论(0)    收藏  举报