找回密码
 立即注册
首页 业界区 安全 Linux scp 命令讲解

Linux scp 命令讲解

梁丘艷蕙 6 小时前
1. 概述

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

2. SCP命令完全解析

2.1 命令结构解剖

SCP命令的基本语法如下:
  1. scp [选项] 源文件 目标路径
复制代码
其中,源文件可以是本地文件路径或远程主机文件路径,目标文件路径也可以是本地文件路径或远程主机文件路径。
使用示例:
1. 从本地主机复制文件到远程主机:
  1. scp local_file remote_username@remote_ip:remote_folder
复制代码
例如,将本地的test.txt文件复制到远程主机10.20.30.31的/home/user/目录下:
  1. scp test.txt user@10.20.30.31:/home/user/
复制代码
2. 从远程主机复制文件到本地主机:
  1. scp remote_username@remote_ip:remote_file local_folder
复制代码
例如,将远程主机10.20.30.31的/home/user/test.txt文件复制到本地当前目录下:
  1. scp user@10.20.30.31:/home/user/test.txt
复制代码
2.2 核心选项详解表

2.png

SCP命令允许用户通过安全的SSH连接,在本地和远程系统之间复制文件或目录。这意味着,即使在传输过程中数据被截获,它仍然受到SSH协议提供的加密保护。
注意事项:
• 在使用SCP命令时,请确保远程主机的SSH服务已经启动,并且可以通过指定的用户名和密码或私钥文件进行身份验证。
• 如果需要传输的文件或目录较大,可能会花费较长的时间,请耐心等待。
• 在传输敏感数据时,请确保使用安全的网络连接,并尽量避免在公共网络上进行文件传输。
总的来说,SCP命令是一个强大且安全的文件传输工具,特别适用于在Linux系统之间进行文件传输。通过掌握其基本语法和常用选项,用户可以轻松地在本地和远程系统之间复制文件或目录。
3. 实战示例大全

3.1 基础文件传输
  1. # 本地→远程
  2. scp invoice.pdf user@server:/home/user/documents/
  3. # 远程→本地
  4. scp user@server:/var/log/app.log ./logs/
  5. # 远程→远程
  6. scp user1@server1:/data/file.txt user2@server2:/backup/
复制代码
3.2 高级应用场景

场景1:迁移整个网站目录
  1. scp -rpC -P 2222 /var/www/html/ admin@newserver:/var/www/
复制代码
参数解析:-r递归 -p保留属性 -C压缩 -P指定端口
场景2:受限带宽传输大文件
  1. scp -l 5120 bigdata.tar.gz user@server:/data/
  2. # 限制带宽为5Mbps (5120 kbit/s)
复制代码
场景3:使用非标准密钥连接
  1. scp -i ~/.ssh/custom_id_rsa -P 3222 secret_file.db user@secureserver:/vault/
复制代码
场景4:加速大文件传输(性能优化)
  1. # 启用压缩(适合文本文件)
  2. scp -C source.log user@server:/logs/
  3. # 并行传输(结合GNU Parallel)
  4. parallel -j 4 scp {} user@server:/data/ ::: part*.tar
复制代码
场景5:断电续传(性能优化)
  1. # 使用rsync替代SCP(支持断点续传)
  2. rsync -Pavz -e "ssh -p 22" largefile.iso user@server:/backup/
复制代码
4. 安全加固策略

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

 
3.png
4.png

5.  替代方案

5.1 SCP vs Rsync

5.png

5.2 不同场景选择建议

6.png

6.  企业应用案例

需求:基础设施网络限制最大文件传输大小为1G,现在需要将远端服务器上的engine-858768cc9c-gswdr-%t-jvm.hprof文件(7.6G)下载到本地。
实现:先在远端服务器上将文件切割成8份,然后在本地通过scp命令下载切割后的文件,然后再合并文件。
1.服务器切割文件
  1. # 将大文件分割成每个 1GB 的片段(按需调整大小)
  2. split -b 1G engine-858768cc9c-gswdr-%t-jvm.hprof  engine-part-
  3. # 检查生成的分片文件
  4. ls -lh engine-part-*
复制代码
2.本地scp批量下载
  1. scp username@server_ip:/path/to/files/engine-part-* .
复制代码
3.本地合并
  1. cat engine-part-* > engine-858768cc9c-gswdr-%t-jvm.hprof  
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册