scp命令

本文详细介绍了SCP命令的基本语法,如何在Linux中安全地复制文件到远程系统和从远程系统复制,包括常用选项、案例演示,以及如何处理不同场景下的文件复制操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scp命令

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

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

image-20220226103350568

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

QA:有关使用 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)
06-01
### SCP 命令的用法及常见问题解决 SCP(Secure Copy Protocol)是一种基于 SSH 的文件传输协议,用于在本地和远程主机之间安全地复制文件。以下是 SCP 命令的基本用法及相关问题的解决方法。 #### 1. 基本语法 SCP 命令的基本语法如下: ```bash scp [选项] 源文件 目标文件 ``` - `源文件`:可以是本地文件路径或远程文件路径。 - `目标文件`:可以是本地文件路径或远程文件路径。 #### 2. 常见用法 ##### 从本地复制文件到远程服务器 ```bash scp /path/to/local/file [email protected]:/path/to/remote/directory/ ``` 此命令将本地文件 `/path/to/local/file` 复制到远程服务器的指定目录中[^1]。 ##### 从远程服务器复制文件到本地 ```bash scp [email protected]:/path/to/remote/file /path/to/local/directory/ ``` 此命令将远程服务器上的文件 `/path/to/remote/file` 下载到本地指定目录中[^1]。 ##### 复制整个目录 使用 `-r` 参数递归复制整个目录: ```bash scp -r /path/to/local/directory [email protected]:/path/to/remote/directory/ ``` 此命令将本地目录 `/path/to/local/directory` 及其所有内容复制到远程服务器的指定目录中。 #### 3. 常见问题及解决方案 ##### 问题 1:SCP 传输速度慢 如果发现 SCP 传输速度较慢,可能是由于网络带宽限制或加密开销较大。可以通过以下方式优化: - 使用压缩选项 `-C`: ```bash scp -C /path/to/local/file [email protected]:/path/to/remote/directory/ ``` 此选项启用数据压缩,可能提高传输效率[^1]。 - 调整 SSH 密钥交换算法: 编辑 SSH 配置文件(通常为 `~/.ssh/config`),添加以下内容: ```bash Host * Ciphers aes128-ctr,aes192-ctr,aes256-ctr ``` ##### 问题 2:SCP 连接失败 如果出现连接失败的问题,可能的原因包括: - 网络连接问题:检查本地与远程服务器之间的网络连通性。 - SSH 服务未启动:确保远程服务器上的 SSH 服务正在运行。 - 权限问题:确认用户对目标目录具有写入权限。 ##### 问题 3:无法定位远程文件 如果提示“no such file or directory”,请检查以下几点: - 确保远程路径正确无误。 - 确认远程用户对该路径具有访问权限。 #### 4. 示例代码 以下是一个完整的 SCP 文件传输示例: ```bash # 从本地上传文件到远程服务器 scp /home/user/example.txt [email protected]:/home/remote_user/ # 从远程服务器下载文件到本地 scp [email protected]:/home/remote_user/example.txt /home/user/ # 复制整个目录 scp -r /home/user/example_directory [email protected]:/home/remote_user/ ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值