1、简介

SCP(Secure Copy,安全复制)是一个在远程(本地与本地、本地与远程、远程与远程)电脑间安全的进行文件传输的方法。它以SSH协议为基础。

而SCP既可以指SCP协议,也可以指SCP程序,接下来,分别进行介绍。

2、SCP协议

SCP协议是一个支持网络文件传输的协议。它运行在22端口,基于BSD RCP协议(而RCP又基于SSH协议提供加密和认证)。所以SCP有时被认为不是一个协议,而仅仅是一个RCP和SSH的组合。其中,RCP负责文件的传输,而SSH协议负责认证和加密。

  协议工作方式

其使用摘要如下:

scp [options] [user@]host1:]file1 []... [ [user@]host2:]file2

除开远程服务器之间的文件复制这个特殊情况, scp会先解析命令行参数, 然后打开一个到远程服务器的连接. 再通过这个连接另一个scp进程, 这个进程的运行方式可以是源模式(source)也可以是宿模式(sink). (译者注: 前者是数据提供者, 源头, 以源模式运行的scp进程后面会被称作是源端. 后者是数据的目的地, 归宿, 以宿模式运行的scp进程后面会被称作是宿端)前者读取文件并通过SSH连接发送到另一端, 后者通过SSH连接接收文件. 源模式和宿模式是通过-f (from)和 -t (to)这两个隐藏选项来启动的. 这两个参数仅供命令内部使用, 因此没写进文档. (译者注: 你执行scp -t不会给出非法参数的报错提示, 而scp -s就会, 因为没有-s这个选项.) 除了这两个隐藏参数外, 还有另一个隐藏参数-d, 表示复制的对象是一个目录而不是文件.

下图给出了一个简化后的scp源/宿模式工作示意图:

+-----------+   remote command: scp -t file2 +------+

| ssh hostB |---------------------------------------->| sshd |

+-----------+                                                     +---+--+

^                                                                       |

|                                                                        |

|fork()                                                      fork()|

|                                                                        |

+----+-----------------+                            +-----------V--+

| scp file hostB:file2 |                           | scp -t file2 |

+----------------------+                             +--------------+

   协议

下面介绍传输协议是如何工作的. 你不如先暂时忘了ssh, sshd以及两台机器之间的连接这些东东. 如果我们只关注以源宿两种模式工作的scp命令的话, 上图可以简化成:

data transfer

+------------------+       ___________   +--------------+

| scp fileX hostY: | ->___________-> | scp -t fileX |

+--------.---------+                                  +-------.------+

|                                                           |

|read()                                                |write()

__....|....__                                         __....|....__

=__  fileX  __:'                                 =__  fileX  __:'

`''''''''                                                    `''''''''

需要注意的是, 永远不会有两个工作模式一样的scp协同工作. (译者注: 你可以想象下两个源端互相期待对方给自己传文件会是啥情况…) 远程服务器上的scp进程选定一种模式后, 本地的scp进程(就是本地用户命令行起的这个进程)会自动选定另一种模式, 因为这个本地进程会于用户交互.

 源端

协议信息是由文本和二进制数据混合构成的. 例如, 当我们要传出一个普通文件时, 协议消息的类型, 文件的权限位, 长度及文件名都会以文本的方式发送, 接着在一个换行符后发送文件的内容. 我们在后面会更详细地讨论这一点. 协议消息内容可能类似:

C0644 299 group

二进制数据传输前需要传输的文本信息可能更多. 源端会一直等宿端的回应, 直到等到回应才会传输下一条协议文本. 在送出最后一条协议文本后, 源端会传出一个ASCII字符’\0′来表示真正文件传输的开始. 当文件接收完成后, 宿端会给源端发送一个’\0′.

宿端

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

 协议消息类型列表

Cmmmm

表示传输单个文件, mmmm是文件的权限位. 实例: C0644 299 group

Dmmmm

表示开始整个目录的递归复制. 此处文件长度将会忽略, 但是不可缺少. 实例: D0755 0 docs

E

表示目录的结束(D-E这一对可以嵌套使用, 这也是我们能正常递归复制目录树的原因.)

T 0  0

当命令行给出-p选项时, 这一类协议消息用来传输所传递的文件的修改时间和访问时间. 时间记录了从UTC 1970.01.01 00:00:00到现在所经历的秒数. 这一类协议消息在最初的rcp实现中并未出现. 实例: T1183828267 0 1183828267 0

传完了这些消息后就开始传文件数据了. 宿端从数据流中读取之前协议消息中指定的文件长度. D和T需要在其他消息之前指定. 这是因为如果这两类消息放在其他消息之后, 这两类消息的内容具体是消息还是数据就不清楚了. 我们可以总结如下:

传完了C类消息后开始传输文件数据.

在传完了D类消息后, 要么出现C类消息, 要么出现E类消息.

 最大文件大小和文件完整性

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

scp本身不提供对文件完整性的保护, 这一特性是在ssh协议那一层完成的.

3、Linux下的SCP程序

最常见的是命令行程序,就介绍下它吧。

使用摘要:

scp [options] [[user@]host1:]file1 ...[[user@]host2:]file2

  可能有用的几个参数 :

  -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

  -C 使能压缩选项 .

  -P 选择端口 . 注意 -p 已经被 rcp 使用 .

  -4 强行使用 IPV4 地址 .

  -6 强行使用 IPV6 地址 .

  -r Recursively copy entire directories.

 实例:

     例1

从本地拷贝到远端

scpSourceFile   user@host:directory/TargetFile

     例2:

从远端拷贝到本地

scp user@host:directory/SourceFile TargetFile

原文链接地址:http://hi.baidu.com/taozpwater/item/1969d8a800b3f5ff14329b5a

SCP (Secure copy)简介相关推荐

  1. Secure Copy Protocol(SCP)简介

    Secure Copy Protocol(SCP)是一种用于在网络上安全传输文件的协议.它使用SSH(Secure Shell)协议来传输文件,因此可以保证文件在传输过程中的安全性.SCP是一种基于命 ...

  2. java调用pscp_PuTTY 提供的文件传输工具PSCP (PuTTY Secure Copy client) 基本使用说明

    通过 SSH 连接,在两台机器之间安全的传输文件,可以用于任何 SSH(包括 SSH v1.SSH v2) 服务器. PSCP 的使用 在控制台直接执行 pscp 可以看到帮助 C:\>pscp ...

  3. Zero Copy 简介

    Zero Copy 简介 标签: buffersocketdescriptoruserapplicationlinux内核 2012-05-04 13:33 5154人阅读 评论(3) 收藏 举报 许 ...

  4. SCP(Secure Copy)

    scp 命令是 SSH 中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用 scp 一个命令就完全解决了.你可以在一台服务器 上以 root 身份运行 #scp servername:/ ...

  5. SAP成都研究院李三郎:SCP Application Router简介

    今天的文章来自李贝宁(Ben),SAP成都研究院的资深程序猿和架构师. 作为成都研究院里同时精通Java, JavaScript和ABAP这三门编程语言的数位同事之一,Ben曾经先后担任了成都CRM ...

  6. hadoop使用之 scp (secure cp)安全拷贝

    一.功能或者说是作用 将任意节点上的文件 安全的拷贝到指点的 节点上 格式说明 : scp -r 源文件的拥有者@源文件的主机名:源文件的位置 目标文件的拥有者@目标文件的主机名:目标文件的位置 sc ...

  7. Linux scp 跨服务器拷贝 + 服务器简介

    笔者刚接触到服务器这个概念,所以就类似于一个在深山老林中的人刚接触电脑一样,所以首先想介绍一下啥是服务器.然后再记录一下scp的用法 一.科普 服务器是计算机的一种,它比普通计算机运行更快.负载更高. ...

  8. Linux命令scp用于远程文件的拷贝(上传和下载)

    3_Linux命令scp用于远程文件的拷贝(上传和下载) 文章目录 1.SCP简介 2.SCP使用 2.1.命令格式: 2.2.命令功能: 2.3.命令参数: 3.使用实例: 如何将本地文件通过终端上 ...

  9. Linux用scp实现无密码传输文件和目录(使用密钥)

    一.SCP简介 SCP(Secure Copy,安全复制)是一个在远程(本地与远程)服务器间安全的进行文件传输的方法.它以SSH协议为基础,使用SSH协议的22端口. 二.SCP无密码传输原理 原理 ...

最新文章

  1. 腾讯布局移动应用商店 总下载量累计达40亿次
  2. 探索“老药新用”最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG
  3. 基于spring boot调用接口的工具类
  4. 倒立摆自动起摆_今天起,中山街坊可以去唱K、游泳、看电影、摆喜酒了!
  5. php复制整个文件夹,PHP实现递归复制整个文件夹的类实例
  6. 交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?
  7. node.js async await 配合Promise对象使用
  8. 自定义View-实现简易车速器(真的够简易)
  9. 【码云周刊第 61 期】四款开源项目教你玩转微信游戏
  10. 《大型数据库技术》MySQL数据库安装配置及基础使用
  11. 日程管理 FullCalendar
  12. Keepalived 无法自动转换主备角色,请关注 iptables 防火墙配置
  13. php 显示外链图片,php绘图之加载外部图片的方法
  14. 点线面的意义_如何运用设计中的点线面?
  15. 【测试基础】Linux文本编辑vi命令
  16. b2c京东流程图_京东商城的商业模式及其运作流程(精)
  17. Win7系统怎么强制格式化U盘
  18. Spring中的Environment
  19. 狂肝10个月手搓GPU,他们在《我的世界》里面玩《我的世界》
  20. 阿里云服务器是如何实现每台服务器都是公网IP的呢?

热门文章

  1. 如何使用Office Communicator 2005的自动配置
  2. 安装了不兼容的APR(基于Apache Tomcat原生库)版本[1.1.29]
  3. Pr 入门教程:如何为剪辑添加外观?
  4. 新晋OpenStack会员:华为与华三,功人和功狗
  5. 5G技术在城市轨道交通应用探讨
  6. Javascript中不等于的代码是什么
  7. 一个 Java 线程池bug引发的 GC 机制思考
  8. 在校大学生如何赚钱?3个创业项目分享
  9. 用canvas画一个五星红旗
  10. 布谷鸟算法的c语言,python 实现布谷鸟算法(CS)