跳到主要内容

5、scp

scp

scp 命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令。使用 SSH 意味着它享有与 SSH 相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。

Linux SCP 命令是一种在两个远程节点之间传输文件的便捷且安全的方式,而无需担心攻击者窥探你的数据。

image-20220226103350568

目录

[toc]

1、基本语法

下面提供了 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 - 保留文件的访问和修改时间。

2、案例演示

1️⃣ 案例1:将文件复制到远程 Linux 服务器

在下面的示例中,我将logs.tar.gz 复制到远程主机的/root目录下。远程主机IP为172.29.9.33,用户名为root。(本地主机ip为172.29.9.32)

1.scp传输文件

我们先用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 root@172.29.9.33:/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.
root@172.29.9.33'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

2.如果要复制目录,请使用-r选项

如果要复制目录,请使用-r选项,如下所示。在这里,我们将 /root/tmp目录复制到远程节点的/root目录中。

#传输目录到远程机器
[root@k8s-node1 ~]#scp -r /tmp/ root@172.29.9.33:/root/
root@172.29.9.33's password:

#在远程机器上验证
[root@k8s-node2 ~]#ls tmp/ #被传输过来的目录存在
vmware-root_5586-3133158215 vmware-root_5593-4155813653

如果不添加-r选项复制目录,会提示如下错误。

[root@k8s-node1 ~]#scp  /tmp/ root@172.29.9.33:/root/
root@172.29.9.33's password:
/tmp: not a regular file

3.如果远程主机端口不是22的话,要用-p参数

#传输文件
[root@k8s-node1 ~]#scp wget-1.14-18.el7_6.1.x86_64.rpm root@172.29.9.33:/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 root@172.29.9.33:/tmp
root@172.29.9.33'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

2️⃣ 案例2:将文件从远程系统复制到本地系统

可以将文件从远程节点复制到本地系统,如下所示:

$ scp [option] user@server-ip:/path/to/source/file /path/to/local/directory

1.scp传输文件

在下面的示例中,我们将文件 /root/passwd从远程系统复制到本地系统:

#传输
[root@k8s-node1 ~]#scp -P 5151 root@172.29.9.33:/etc/passwd /root/
root@172.29.9.33'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

2.如果要复制目录,请使用-r选项

同样,你可以使用-r标志将目录从远程主机复制到本地系统,如图所示。

#传输
[root@k8s-node1 ~]#scp -P 5151 -r root@172.29.9.33:/tmp /root/
root@172.29.9.33'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

FAQ

有关使用 scp 命令的更多选项,可以查看手册,命令是:man scp

image-20220226103230212

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230912072007284

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎 https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20230911210157421

1