拷贝之 SCP


如何在两台服务器之间进行文件的拷贝


不同的Linux之间copy文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。

第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。


下面是scp命令的一些用法:

用到的指令:scp (secure copy的简写)
作用: 在linux下远程进行服务器之间的复制
命令格式 :

  • scp 【参数】【原路径】【目标路径】

  • 复制文件(复制目录需要加参数 -r)

scp file username@ip:/dir ##上传
scp username@ip:/dir/file/dir ##下载

 scp local_file remote_username@remote_ip:remote_folder
 scp local_file remote_username@remote_ip:remote_file
 scp local_file remote_ip:remote_folder
 scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要输入用户密码;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码。

第1个仅仅指定了远程的目录,文件名字不变;
第2个制定了文件名;
第3个仅仅指定了远程的目录,文件名字不变;
第4个指定了文件名。


  • 下面举例:

    A服务器(student):172.25.77.11
    B服务器(kiosk):172.25.77.250

    **向kiosk发送TEST1、2、3文件********

[student@server77 Desktop]$ scp 
bin_westos_file.txt  TEST2                TEST3~
error                TEST2~               test.txt
TEST1                TEST3                time.txt
[student@server77 Desktop]$ scp TEST* kiosk@172.25.77.250:/home/kiosk/Desktop
The authenticity of host '172.25.77.250 (172.25.77.250)' can't be established.
ECDSA key fingerprint is 84:95:73:92:3f:6d:11:1c:2f:41:3b:2a:cd:a1:d7:b3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.77.250' (ECDSA) to the list of known hosts.
kiosk@172.25.77.250's password: 
TEST1                                         100%  366     0.4KB/s   00:00    
TEST2                                         100% 2662     2.6KB/s   00:00    
TEST2~                                        100% 2662     2.6KB/s   00:00    
TEST3                                         100% 4207     4.1KB/s   00:00    
TEST3~                                        100% 4207     4.1KB/s   00:00    

.
.

***从student下复制d文件到本服务器的桌面**********

[root@foundation77 ~]# scp student@172.25.77.11:/home/student/Desktop/d /home/kiosk/Desktop
student@172.25.77.11's password: 
d                                       100% 1126     1.1KB/s   00:00   

  • scp的一些参数
 -1:使用ssh协议版本1 -4:使用ipv4;
 -6:使用ipv6;
 -B:以批处理模式运行; 
 -F:指定ssh配置文件;
 -o:指定使用的ssh选项;
 -p:保留文件的最后修改时间,最后访问时间和权限模式;
 -r:以递归方式复制。
<think>好的,我现在需要帮助用户了解如何使用scp命令进行文件拷贝。用户已经提供了几个相关的引用内容,我需要综合这些信息,并结合用户之前的问题来给出一个清晰、详细的回答。 首先,用户之前的问题是关于在ROS 2中查看MCAP包的详细信息,现在转向了scp命令的使用。可能用户在进行ROS开发时需要将文件传输到远程服务器或从服务器下载数据,因此需要掌握scp的基本操作。 接下来,我需要参考用户提供的四个引用内容,这些引用详细说明了scp的用法、参数以及示例。需要注意的是,用户可能已经对Linux有一定了解,但作为新手,可能需要更基础的指导,包括命令格式、常见参数和实际例子。 用户的问题是如何使用scp进行文件拷贝,因此回答需要覆盖从本地到远程、远程到本地的传输,以及目录和文件的处理。同时,引用中提到了一些参数,比如-P指定端口,-r递归复制,-p保留属性,-C压缩传输,-q静默模式等,这些都需要在回答中解释清楚。 用户可能的需求包括:基本命令格式、不同场景下的应用(如指定端口、复制目录、保持文件属性)、常见问题处理(如权限问题、SSH配置)。此外,用户可能关心如何验证传输后的文件完整性,这也是一个实用的点,可以在回答中提到。 需要确保回答结构清晰,分步骤讲解,每个部分都有示例,这样用户能够按照步骤操作。同时,要避免使用过于专业的术语,保持语言简洁易懂。最后,相关问题部分可以引导用户进一步学习,比如处理传输中断、提高传输速度等,这些可能也是用户后续会遇到的问题。 总结步骤: 1. 介绍scp的基本概念和用途。 2. 详细说明本地到远程、远程到本地的文件传输命令,包括不同参数的使用。 3. 提供目录传输的方法。 4. 解释常用参数的作用。 5. 给出验证文件完整性的方法。 6. 常见问题处理,如端口问题、权限问题。 7. 生成相关问题,帮助用户深入学习和解决问题。</think>--- ### 一、SCP 基础概念 SCP(Secure Copy Protocol)是基于 SSH 协议的安全文件传输工具,适用于 Linux/Unix 系统之间的远程文件拷贝。其特点包括: - **加密传输**:所有数据通过 SSH 加密,防止中间人攻击[^1][^2] - **跨服务器操作**:支持本地与远程、远程与远程之间的文件传输 - **灵活参数**:支持递归复制、端口指定、带宽限制等功能[^3] --- ### 二、核心操作场景 #### 1. 本地 → 远程传输 **基本格式**: ```bash scp [参数] 本地文件路径 用户名@远程IP:目标路径 ``` **示例**: ```bash # 传输单个文件到远程主机的/home/user目录(默认SSH端口22) scp report.pdf user@192.168.1.100:/home/user # 指定端口号(若远程SSH端口为2222) scp -P 2222 backup.tar.gz user@example.com:/opt/backups # 传输目录(递归复制) scp -r ~/project_folder user@10.0.0.5:/var/www # 传输时保留文件属性(修改时间、权限) scp -p config.ini user@server:/etc/app ``` #### 2. 远程 → 本地传输 **基本格式**: ```bash scp [参数] 用户名@远程IP:文件路径 本地目标路径 ``` **示例**: ```bash # 下载远程日志文件到当前目录 scp user@192.168.1.100:/var/log/app.log . # 下载整个数据库备份目录(指定非标端口) scp -P 2222 -r admin@db.example.com:/backups/mysql ~/local_backups # 重命名下载文件 scp user@server:/data/report.csv ./monthly_report_final.csv ``` #### 3. 远程 ↔ 远程传输 ```bash scp user1@source_host:/path/to/file user2@dest_host:/target/path ``` --- ### 三、常用参数详解 | 参数 | 作用 | 示例场景 | |------|------|----------| | `-P` | 指定 SSH 端口 | 连接使用非标准端口的服务器 | | `-r` | 递归复制目录 | 传输项目文件夹时必需 | | `-C` | 启用压缩 | 传输大文件时节省带宽 | | `-p` | 保留文件属性 | 保持文件时间戳和权限 | | `-q` | 静默模式 | 脚本中避免输出干扰 | | `-l` | 带宽限制(单位 Kbit/s) | `-l 800` 限制为 100KB/s | | `-i` | 指定密钥文件 | 使用非默认SSH密钥认证 | --- ### 四、高阶使用技巧 #### 1. 断点续传(通过rsync实现) ```bash rsync -P --rsh='ssh -p 2222' large_file.iso user@remote:/backups ``` `-P` 参数显示进度并支持断点续传[^4] #### 2. 文件完整性验证 传输完成后校验 MD5: ```bash # 本地生成校验值 md5sum bigfile.zip # 远程生成校验值 ssh user@remote "md5sum /path/to/bigfile.zip" ``` #### 3. 批量传输脚本 ```bash #!/bin/bash FILES=("file1" "file2" "dir/") REMOTE="user@192.168.1.100:/backup" for item in "${FILES[@]}"; do scp -r -C -p "$item" "$REMOTE" done ``` --- ### 五、常见问题处理 #### 1. **"Permission denied" 错误** - 确认远程用户是否有目标目录写入权限 - 检查 SSH 密钥配置是否正确 - 尝试添加 `-v` 参数查看详细错误信息 #### 2. **大文件传输中断** - 使用 `screen` 或 `tmux` 保持会话 - 改用 `rsync` 支持断点续传 #### 3. **特殊字符处理** 文件名含空格时使用引号包裹: ```bash scp "Photo 2023.jpg" user@remote:"~/Photos/New\ Folder/" ``` --- ### 六、性能优化建议 1. **启用压缩**(适合文本类文件) ```bash scp -C source.txt user@remote:/dest ``` 2. **并行传输多个文件** ```bash scp file1.txt file2.txt user@remote:/dest/ ``` 3. **禁用加密加速传输**(仅限内网安全环境) ```bash scp -c none large_file.iso user@remote:/dest ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值