目录
简介
一、语法
二、示例
2.1 将本地文件复制到远程主机目录
2.2 将本地目录复制到远程主机目录
2.3 将远程主机的文件复制到本机
2.4 复制远程主机目录到本机
简介
今天我们来介绍一个Linux命令:scp
scp — secure copy (remote file copy program),意思安全拷贝,安全复制的意思,是一个远程文件复制程序。准确来说就是不同服务器之间进行文件(包括目录)进行安全复制的命令。scp基于加州大学Regents的BSD源代码中的rcp程序。
如何安全的呢?
通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令。使用 SSH 意味着它享有与 SSH 相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。
一、语法
语法介绍:
scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
有这么多参数?是的,确实是。如果不信,可以使用以下命令查看:
man scp
这么多参数,我们大多用不到,我们介绍几个常用的即可。
-P port:Specifies the port to connect to on the remote host. Note that this option is written with a capital ‘P’, because -p is already reserved for preserving the times and modes of the file.
-p Preserves modification times, access times, and modes from the original file.
翻译过来就是:
-P: 指定要连接到远程主机上的端口。请注意,此选项使用大写“P”编写,因为-P已被保留用于保存文件的时间和模式。
-p:保留原始文件的修改时间、访问时间和模式。
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
翻译过来就是:
-r:递归复制整个目录。注意,scp遵循在树遍历中遇到的符号链接。
-C Compression enable. Passes the -C flag to ssh(1) to enable compression.
翻译过来就是:
-C:压缩启用。将-C标志传递给ssh(1)以启用压缩。
总结如下:
-P:指定端口。默认是22,不需要指定;如果不是22,则用大写P指定端口。
-p:保留原始文件的修改时间、访问时间和模式。
-r:递归复制整个目录。复制目录是必不可少。
-C:压缩文件。
二、示例
2.1 将本地文件复制到远程主机目录
scp redis.conf root@k8s-node02:/usr/local/redis-cluster/slave-6381/conf
将本机的当前目录的redis.conf文件,通过远程主机的用户root,复制到k8s-node02主机的22端口的/usr/local/redis-cluster/slave-6381/conf目录。
其中k8s-node02可以替换为远程主机的ip,22端口是默认的不用填写,root是远程主机的用户名。
执行该命令后会有提示:
意思是:
无法确定主机“k8s-master01(192.168.222.100)”的真实性。
ECDSA密钥指纹为SHA256:nbOQMg0kDl5DW/jNRip8WsjbGKqzS/CIUuir7EWIB1Q。
是否确实要继续连接(是/否/[指纹])?
我们此时输入yes,然后输入远程主机的密码即可,如果成功会显示复制成功的文件:redis.conf。
2.2 将本地目录复制到远程主机目录
我们创建一个目录,然后在该目录下创建一个文件,最后将该目录连同文件一起复制到远程主机。
scp -r test root@k8s-master01:/usr/local/redis-cluster/slave-6381/
现在去k8s-master01主机的/usr/local/redis-cluster/slave-6381/目录下查看一番。
2.3 将远程主机的文件复制到本机
我们先删掉本地目录下的test-scp.txt文件,然后将k8s-master01主机的该文件复制过来。
scp root@k8s-master01:/usr/local/redis-cluster/slave-6381/test/test-scp.txt ./
上面的./可以修改为你想要的目录,这里的./指的是当前主机的当前目录。
我们下面要删除整个test目录,然后将远程主机的目录复制过来。
2.4 复制远程主机目录到本机
scp -r root@k8s-master01:/usr/local/redis-cluster/slave-6381/test ./