Linux系列—SCP命令认识篇

Posted 清晨丶暖阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系列—SCP命令认识篇相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

一、SCP原理

说到SCP不得不提及rcp协议,虽然在协议层面上没有区别,但在传输方面scp使用了rlogin,实际除了远程服务器间的文件复制,还能解析命令携带的参数,后续就是打开远程服务器的连接,在通过连接开辟另一个scp进程,也就形成源端和宿端。

也就是说:两个进程scp,一个源端通过SSH连接发送到宿端,宿端通过SSH连接接收。源和宿则由隐藏参数-f、-t启动。

+-----------+   remote command: scp -t file2    +------+
| ssh hostB |---------------------------------->| sshd |
+-----------+                                   +---+--+
^                                                   |
|                                                   |
|fork()                                       fork()|
|                                                   |
+----+-----------------+                +-----------V--+
| scp file hostB:file2 |                | scp -t file2 |
+----------------------+                +--------------+

实际上scp的协同工作模式不可能一致,因为源端和宿端不能知晓双方所需传输的文件,所以是源端服务器选定scp模式后,宿端会自动选定scp进程模式(该进程会与源端用户交互)。

源端:协议信息是由文本和二进制数据混合构成的。

  1. 普通文件:协议消息的类型, 文件的权限位, 长度及文件名都会以文本的方式发送。
  2. 二进制文件:二进制数据传输前需要传输的文本信息可能更多. 源端会一直等宿端的回应, 直到等到回应才会传输下一条协议文本. 在送出最后一条协议文本后, 源端会传出一个大小为零的字符’\\0’来表示真正文件传输的开始. 当文件接收完成后, 宿端会给源端发送一个’\\0’。

宿端:来自源端的每条消息和每个传输完毕的文件都需要宿端的确认和响应. 宿端会返回三种确认消息: 0(正常), 1(警告)或2(严重错误, 将中断连接). 消息1和2可以跟一个字符串和一个换行符, 这个字符串将显示在scp的源端. 无论这个字符串是否为空, 换行符都是不可缺少的.

1、SCP传输文件大小和完整性说明

scp所能传输的最大文件大小是由scp协议, scp软件, 操作系统以及文件系统综合决定的. 由于OpenSSH用long long int来放文件大小, 因此理论上可以传输的最大文件大小是2^63 Byte. 给一个参考值, 2^40 Byte的大小是1T. 这意味着我们可以认为协议本身没有文件大小的限制.

scp本身不提供对所需传输文件完整性的保护。

二、SCP命令说明

### linux的scp命令可以在linux服务器之间复制文件和目录。
scp [参数] [原路径] [目标路径]
### 当前服务器传输文件:目录之间
scp -r /opt /mnt
### 远程服务器传输文件:远程传输
scp -r /opt root@192.168.88.77:/mnt
### 从远程服务端复制到当前客户端
scp root@192.168.88.67:/opt/zook.sh /mnt/
### 从指定的服务端复制到指定的客户端
scp -r root@192.168.88.67:/opt root@192.168.88.77:/mnt/
参数说明
-1强制scp命令使用协议ssh1
-2-2 强制scp命令使用协议ssh2
-4-4 强制scp命令只使用IPv4寻址
-6-6 强制scp命令只使用IPv6寻址
-B-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p-p 保留原文件的修改时间,访问时间和访问权限。
-q-q 不显示传输进度条。
-r-r 递归复制整个目录。
-v-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P-P port 注意是大写的P, port是指定数据传输用到的端口号。
-S-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

参考自:https://blog.csdn.net/pkufergus/article/details/46537775

以上是关于Linux系列—SCP命令认识篇的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维10:scp命令详解

精通Linux系列服务器之间的telnet与scp命令用法,进程管理命令之ps -ef与ps aux详解

精通Linux系列服务器之间的telnet与scp命令用法,进程管理命令之ps -ef与ps aux详解

Linux基础篇01-认识操作系统远程连接Linux命令案例

Linux命令之远程拷贝文件scp

Linux使用详解(进阶篇)