如何在 Ubuntu 24.04 上使用 SCP 命令教程
简介
scp
代表 Secure Copy Protocol。Linux 中的 scp
命令允许你通过加密的 SSH (Secure Shell) 连接安全地在主机之间传输文件。与常规的复制命令(如 cp
)不同,scp
还确保在传输过程中数据的完整性。
本文将解释如何使用 scp
命令有效地在 Linux 中传输文件和目录。
准备工作
服务器准备
必要前提:
## 准备工作
### 服务器准备
必要前提:
- 两台部署了 Ubuntu 24.04 的实例,并启用 `limited user login` 选项,分别用作你的 `local` 和 `remote` 工作站(推荐腾讯云、阿里云或雨云等)。
- 使用 SSH 访问这两个实例。
- 更新这些实例。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://www.rainyun.com/NTE2NDM3_
### 创建雨云服务器
> 以下步骤仅供参考,请根据实际需求选择配置。
>
- 点击 **云产品** → **云服务器** → **立即购买**。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用 PowerShell
进行 SSH
远程连接到服务器,Win+R
打开运行窗口,输入 powershell
后点击确定。
- 到此为止,我们的云服务器就远程连接上了。
安装和配置步骤
SCP 命令语法
以下是基本的 scp
命令语法:
scp [options] [source] [destination]
在上述 scp
命令中:
[options]
:接受可选标志以修改命令的行为。[source]
:指定要复制的文件或目录。[destination]
:设置你想要放置文件的目标位置。
使用最常见的 SCP 命令选项
以下是最常见的 scp
命令选项:
选项 | 描述 |
---|---|
-P | 指定连接远程主机时使用的端口。 |
-p | 保留原始文件的修改时间、访问时间和模式。 |
-r | 递归复制整个目录。 |
-q | 安静模式;抑制非错误消息。 |
-C | 启用压缩。 |
-l | 限制传输过程中使用的带宽。 |
-v | 详细模式;显示详细的调试消息。 |
-i | 设置用于认证的私钥位置 |
创建样本目录和文件
按照以下步骤在 Linux 上创建样本目录和文件以测试 scp
命令。
- 在本地服务器上创建三个样本
.txt
文件。
$ touch file1.txt file2.txt file3.txt
-
在本地服务器上创建一个样本
dir
目录。 -
在远程服务器上创建三个样本
.txt
文件。
$ touch file4.txt file5.txt file6.txt
- 在远程服务器上创建
dir1
和dir2
样本目录。
使用 SCP 传输文件和目录
按照以下步骤使用 scp
命令在 Linux 中传输文件和目录。
- 将
file1.txt
文件从本地服务器复制到远程服务器。
$ scp file1.txt linuxuser2@remote_server:/home/linuxuser2
上述命令安全地将 file1.txt
从本地服务器复制到远程服务器用户的主目录。默认情况下,SCP 命令将文件复制到用户的主目录,除非你指定了另一个目录。
当提示时输入 yes
接受远程服务器的指纹密钥。
- 从远程服务器将
file4.txt
复制到本地服务器。
$ scp linuxuser2@remote_server:/home/linuxuser2/file4.txt /home/linuxuser1/
- 使用递归
-r
选项将dir
目录从本地服务器复制到远程服务器。
$ scp -r dir linuxuser2@remote_server:/home/linuxuser2/
上述命令使用 -r
选项递归地将 dir
目录从本地服务器复制到远程服务器上的 linuxuser2
主目录,包括所有文件和子目录。
- 将远程服务器上的
dir1
目录复制到本地服务器用户的主目录。
$ scp -r linuxuser2@remote_server:/home/linuxuser2/dir1 /home/linuxuser1/
你可以探索 Linux 中的 find
命令,快速定位系统上的文件。
使用 SSH 密钥启用无密码认证
scp
命令默认使用密码认证来复制和传输文件。基于 SSH 密钥的认证允许在使用 scp
命令传输文件时实现无密码认证。按照以下步骤生成新的 SSH 密钥以与 scp
命令一起使用。
- 在本地服务器上生成新的 SSH 密钥对。
$ ssh-keygen -t rsa -b 4096
按 Enter
接受默认私钥文件位置,并在提示时设置可选的密码短语。
- 将你的公钥复制到远程服务器。
$ ssh-copy-id linuxuser2@remote_server
当提示时输入远程用户密码以复制公钥。
- 使用 SSH 访问远程服务器,并验证你不会被提示输入密码。
$ ssh linuxuser2@remote_server
使用 SCP 命令和 SSH 密钥认证传输文件
按照以下步骤使用 scp
命令和 SSH 密钥认证传输文件。
- 将
file2.txt
从本地服务器复制到远程服务器的dir2
目录。
$ scp file2.txt linuxuser2@remote_server:/home/linuxuser2/dir2/
上述命令安全地将 file2.txt
文件从本地服务器复制到远程服务器的 dir2
。
输出:
- 将远程服务器的
dir2
目录复制到本地服务器。
$ scp -r linuxuser2@remote_server:/home/linuxuser2/dir2 /home/linuxuser1
输出:
在 Linux 中使用 SCP 命令和高级选项
- 将
file3.txt
复制到远程服务器的dir2
目录,并使用-p
选项保留原始文件属性。
$ scp -p file3.txt linuxuser2@remote_server:/home/linuxuser2
上述命令使用 -p
选项复制 file3.txt
到 dir2
目录,同时保留原始文件属性,包括原始时间戳和文件权限。
输出:
- 将
file1.txt
复制到远程服务器并使用-C
选项启用压缩。
$ scp -C file1.txt linuxuser2@remote_server:/home/linuxuser2/dir2/
上述命令复制 file1.txt
到 dir2
目录,并使用 -C
选项在传输过程中压缩数据以加快速度。
输出:
- 使用
-l
选项限制file2.txt
的带宽至每秒千比特(Kbps)。
$ scp -l 500 file2.txt linuxuser2@remote_server:/home/linuxuser2
上述命令使用 -l
选项将传输速度限制为 500
Kbps,避免在将文件传输到远程服务器时过度使用网络资源。
输出:
- 使用
-v
选项在详细模式下显示详细的调试消息。
$ scp -v file3.txt linuxuser2@remote_server:/home/linuxuser2
输出:
- 使用
-i
选项指定用于认证的私钥。将/path/to/private_key
替换为你实际的私钥路径。
$ scp -i /path/to/private_key file1.txt user@remote_server:/home/linuxuser2
上述命令使用 -i
选项指定一个私钥文件用于 SSH 认证。这在使用多个 SSH 密钥时非常有用,需要使用特定的密钥建立连接。
输出:
运行以下命令在你的用户主目录下查看默认的 SSH 私钥位置。
输出:
- 使用特定的 SSH 端口
-P
将file3.txt
复制到远程服务器目录。
$ scp -P 22 file3.txt linuxuser2@remote_server:/home/linuxuser2
上述命令使用 -P
选项使用默认的 SSH 端口 22
传输文件。当远程服务器上的 SSH 守护进程在自定义端口上运行时,这一点很重要。
输出:
- 使用
tar
和scp
命令传输归档文件。例如,压缩dir
目录并将归档文件传输到远程服务器。
$ tar czf - dir | ssh linuxuser2@remote_server 'tar xzf - -C /home/linuxuser2/dir1'
上述命令压缩 dir
目录,并通过 SSH 将数据复制到远程服务器。
tar xzf - -C
命令将文件解压到用户主目录下的 dir1
目录,以实现高级压缩和高效的文件传输。
结尾
你已经使用了 Linux 中的 scp
命令,它的语法、选项和实际示例。此外,你还设置了基于 SSH 密钥的认证,允许你更高效地传输文件和目录,无需密码。scp
命令允许你通过结合各种命令选项在 Linux 中安全高效地在主机之间传输文件。
雨云 - 新一代云服务提供商: https://www.rainyun.com/NTE2NDM3_