scp 命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令。使用 SSH 意味着它享有与 SSH 相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。
Linux SCP 命令是一种在两个远程节点之间传输文件的便捷且安全的方式,而无需担心攻击者窥探你的数据。
下面提供了 SCP 命令的基本语法:
$ scp [option] /path/to/source/file user@server-ip:/path/to/destination/directory
/path/to/source/file
– 这是打算复制到远程主机的源文件。
user@server-IP:
– 这是远程系统的用户名和 IP 地址。请注意 IP 地址后面加冒号。
/path/to/destination/directory
– 这是文件将复制到的远程系统上的目标目录。
以下是scp命令常用的几个选项:
-C
- 这会在复制过程中压缩文件或目录。-P
- 如果默认 SSH 端口不是 22,则使用此选项指定 SSH 端口。-r
- 此选项递归复制目录及其内容。-p
- 保留文件的访问和修改时间。在下面的示例中,我将logs.tar.gz 复制到远程主机的/root目录下。远程主机IP为172.29.9.33,用户名为root。(本地主机ip为172.29.9.32)
我们先用dd命令在本地生成一个大文件logs.tar.gz用于测试:
[root@k8s-node1 ~]#dd if=/dev/zero of=logs.tar.gz bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 4.53084 s, 231 MB/s
[root@k8s-node1 ~]#ll -h logs.tar.gz
-rw-r--r-- 1 root root 1000M Feb 26 10:02 logs.tar.gz
开始使用scp命令将文件复制到远程 Linux 服务器:
[root@k8s-node1 ~]#scp logs.tar.gz [email protected]:/root/
The authenticity of host '172.29.9.33 (172.29.9.33)' can't be established.
ECDSA key fingerprint is SHA256:XfMhwZeoqC6kPHaF1uPzLdY9t2ZgNoNvyEd0kJd24eY.
ECDSA key fingerprint is MD5:ec:5e:37:9d:fc:e7:af:e1:9e:3a:ac:21:81:92:b5:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.29.9.33' (ECDSA) to the list of known hosts.
[email protected]'s password:
logs.tar.gz 100% 1000MB 50.9MB/s 00:19
到远程主机查看传输过去的文件是否存在:
[root@k8s-node2 ~]#ll -h logs.tar.gz #可以看到,传输过去的文件存在
-rw-r--r-- 1 root root 1000M Feb 26 10:05 logs.tar.gz
-r
选项如果要复制目录,请使用-r
选项,如下所示。在这里,我们将 /root/tmp目录复制到远程节点的/root目录中。
#传输目录到远程机器
[root@k8s-node1 ~]#scp -r /tmp/ [email protected]:/root/
[email protected]'s password:
#在远程机器上验证
[root@k8s-node2 ~]#ls tmp/ #被传输过来的目录存在
vmware-root_5586-3133158215 vmware-root_5593-4155813653
如果不添加-r
选项复制目录,会提示如下错误。
[root@k8s-node1 ~]#scp /tmp/ [email protected]:/root/
[email protected]'s password:
/tmp: not a regular file
-p
参数#传输文件
[root@k8s-node1 ~]#scp wget-1.14-18.el7_6.1.x86_64.rpm [email protected]:/tmp
ssh: connect to host 172.29.9.33 port 22: Connection refused
lost connection
[root@k8s-node1 ~]#scp -P 5151 wget-1.14-18.el7_6.1.x86_64.rpm [email protected]:/tmp
[email protected]'s password:
wget-1.14-18.el7_6.1.x86_64.rpm 100% 547KB 29.6MB/s 00:00
#验证
[root@k8s-node2 ~]#ll /tmp/wget-1.14-18.el7_6.1.x86_64.rpm
-rw-r--r-- 1 root root 560272 Feb 26 10:12 /tmp/wget-1.14-18.el7_6.1.x86_64.rpm
可以将文件从远程节点复制到本地系统,如下所示:
$ scp [option] user@server-ip:/path/to/source/file /path/to/local/directory
在下面的示例中,我们将文件 /root/passwd
从远程系统复制到本地系统:
#传输
[root@k8s-node1 ~]#scp -P 5151 [email protected]:/etc/passwd /root/
[email protected]'s password:
passwd 100% 1184 538.9KB/s 00:00
#验证
[root@k8s-node1 ~]#ll passwd
-rw-r--r-- 1 root root 1184 Feb 26 10:30 passwd
-r
选项同样,你可以使用-r
标志将目录从远程主机复制到本地系统,如图所示。
#传输
[root@k8s-node1 ~]#scp -P 5151 -r [email protected]:/tmp /root/
[email protected]'s password:
wget-1.14-18.el7_6.1.x86_64.rpm 100% 547KB 24.9MB/s 00:00
#验证
[root@k8s-node1 ~]#ls tmp/
vmware-root_5460-2864841600 vmware-root_5461-3845494878 wget-1.14-18.el7_6.1.x86_64.rpm
scp
命令的更多选项,可以查看手册,命令是:man scp
mware-root_5460-2864841600 vmware-root_5461-3845494878 wget-1.14-18.el7_6.1.x86_64.rpm
### QA:有关使用 `scp` 命令的更多选项,可以查看手册,命令是:`man scp`
![image-20220226103230212](https://img-blog.csdnimg.cn/img_convert/86f0500e60310c869fb3fe8e962d9f60.png)