Linux scp(secure copy)命令用于在Linux和其他Unix系统中通过SSH协议在主机之间安全地复制文件和目录。它类似于cp命令,但scp可以用于在不同主机之间传输文件。

1、命令简介

scp:安全复制(远程文件复制程序)。

2、命令语法

scp
.Bk -words [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program]
.Sm off [ [user @] host1: file1]
.Sm on [...]
.Sm off [ [user @] host2: file2]
.Sm on
.Ek

3、命令描述

SCP用于网络中主机间的文件复制。它使用ssh(1)进行数据传输,并使用与ssh(1)相同的身份验证和提供相同的安全性。与rcp(1)不同,如果身份验证需要密码或口令,scp将要求输入。任何文件名都可以包含主机和用户规范,以表明文件将被复制到/从该主机。可以在两个远程主机之间进行复制。

当将源文件复制到已经存在的目标文件时,scp将替换目标文件的内容(保留inode)。

如果目标文件还不存在,则创建一个具有目标文件名的空文件,然后用源文件内容填充。不尝试使用临时文件进行"near-atomic"传输。

4、命令选项

选项

描述

-1

强制scp命令使用协议ssh1

-2

强制scp命令使用协议ssh2

-4

强制scp命令只使用IPv4寻址

-6

强制scp命令只使用IPv6寻址

-B

使用批处理模式(传输过程中不询问传输口令或短语)

-C

允许压缩。(将-C标志传递给ssh,从而打开压缩功能)

-p

保留原文件的修改时间,访问时间和访问权限。

-q

不显示传输进度条。

-r

递归复制整个目录。

-v

详细方式显示输出。

scp和ssh(1)会显示出整个过程的调试信息。这

些信息用于调试连接,验证和配置问题。

-c cipher

以cipher将数据传输进行加密,

这个选项将直接传递给ssh。

-F ssh_config

指定一个替代的ssh配置文件,

此参数直接传递给ssh。

-i identity_file

从指定文件中读取传输时使用的密钥文件,

此参数直接传递给ssh。

-l limit

限定用户所能使用的带宽,以Kbit/s为单位。

-o ssh_option

如果习惯于使用ssh_config(5)中的参数传递方式。

-P port

注意是大写的P, port是指定数据传输用到的端口号。

-S program

指定加密传输时所使用的程序。

此程序必须能够理解ssh(1)的选项。

5、使用示例

1)将本地文件复制到远程主机

scp localfile.txt user@remotehost:/remote/directory/

将本地文件localfile.txt复制到远程主机remotehost的/remote/directory/目录下。需要使用远程主机的用户名user

2)将远程主机上的文件复制到本地主机

scp user@remotehost:/remote/directory/remotefile.txt /local/directory/

将远程主机上的文件remotefile.txt复制到本地主机的/local/directory/目录下。

3)递归复制整个目录

scp -r /local/directory user@remotehost:/remote/directory/

将本地的整个目录/local/directory递归复制到远程主机的/remote/directory/目录下。

4)指定端口

scp -P 2222 localfile.txt user@remotehost:/remote/directory/

通过指定SSH端口(例如2222)将本地文件localfile.txt复制到远程主机。

5)使用私钥文件进行连接

scp -i ~/.ssh/id_rsa localfile.txt user@remotehost:/remote/directory/

使用指定的私钥文件~/.ssh/id_rsa进行SSH连接,并将本地文件localfile.txt复制到远程主机。

6)将本地文件上传到远程服务器

scp /home/user/localfile.txt user@192.168.1.100:/home/user/remote/

7)从远程服务器下载文件到本地

scp user@192.168.1.100:/home/user/remote/remotefile.txt /home/user/

8)递归复制本地目录到远程服务器

scp -r /home/user/localdir user@192.168.1.100:/home/user/remote/

推荐文档