你是否曾想过在计算机网络中传输一些文件,但遇到了安全问题?好吧,你不能像小红帽一样把文件扔到网络上,然后希望它们保持安全。你需要安全措施。你应该使用文件传输协议,确保你的数据受到保护,防止未经授权的访问、网络嗅探、数据泄露和其他类型的威胁。
安全复制协议(SCP)是一种强大的文件传输网络协议,可在网络上的不同机器之间传输文件。在这篇博客文章中,我们将深入了解这个协议,并探索从远程机器到本地机器使用 SCP 的潜力。
SCP 是如何工作的?
SCP 使用 SSH (Secure Shell) 来传输文件。但这到底意味着什么呢? SSH 是一种网络协议,用于安全地远程访问服务器。它具备身份验证、加密和验证传输数据文件完整性的方法。SCP 依靠 SSH 提供的这些安全特性和加密方法,通过网络安全地传输文件。这样,你就可以使用 SCP 从远程传输到本地服务器,实现安全连接和文件传输,同时确保数据的真实性和机密性。
使用 SCP 传输文件:为什么以及如何使用?
使用 SCP 从远程传输到本地和从本地传输到远程都是高效灵活的文件传输方式。SCP 在文件传输方面有几大优势。例如,与 FTP 等其他文件传输方法相比,SCP 提供更强的安全措施。SCP 与其他协议的另一个区别是速度。SCP 通常比 SFTP 等其他协议快得多,是在 Linux 机器之间传输文件的绝佳工具。
你可以使用 SCP 移动文件:
- 从本地机器到远程机器
- 从远程机器到本地机器
- 从一台远程机器到另一台远程机器。
现在让我们开始实际使用 Linux SCP 语法进行文件传输。首先需要在两台计算机上设置 SSH。不过需要注意的是,SSH 通常已预装在所有 Linux 机器上。如果你的情况也是这样,可以跳过这些步骤。
1. Setting up SSH
运行以下命令安装 SSH:
sudo apt install openssh-client
2. 生成 SSH 密钥
客户端设备随后需要建立 SSH 连接。客户端和服务器之间的安全连接需要私钥和公钥。运行以下命令为你生成 SSH 密钥对:
ssh-keygen
运行此命令时,系统通常会要求你为密钥对提供名称和密码短语(可选)。密钥对生成后,你需要将公钥复制到服务器。
现在让我们看一下 SCP 命令的基本格式:
scp [options] [source username@IP]:/[directory/file name] [destination username@IP]:/[directory]
- [options] > 此部分可替换为不同的 SCP 命令选项,我们稍后会详细说明。
- [source username@IP] > 此部分应替换为本地机器的用户名和 IP 地址。例如:[email protected]
- [directory/file name] > 此部分应替换为你要发送的文件的位置。
- [destination username@IP] > 此部分应替换为接收方机器的用户名和 IP 地址。
- [directory] > 此部分应替换为文件在远程机器上的目标位置。
现在你已经了解了基本命令的样子。让我们看一下 SCP 命令的所有实用选项:
| Option | Usecase |
| -C |
使用此选项可在传输文件时对其进行压缩。
|
| -c <cipher> |
使用此选项可以告诉 SCP 使用特定的加密算法。例如:scp -c <aes128-ctr>。
|
| -v |
此选项会显示过程的逐步进展。
|
| -l <limit in kilobytes> |
此选项允许你设置最大带宽限制。例如,以下命令将带宽限制设置为每秒 100 kb:scp -l 100
|
| -P |
使用此选项可以改变远程服务器的 SSH 端口。SCP 默认使用端口 22。
|
| -S <program name> |
使用此选项可以选择用于连接的程序。
|
| -r |
递归复制整个文件或目录。
|
使用 SCP 传输文件
还记得 SCP 有三种传输类型吗?现在我们要逐一探索每种传输方式。但在开始前先明确目标。我的 Linux 电脑桌面上有一张猫的照片,第一步我要把它传到 Linux 远程服务器。然后我再把它传回本地电脑。最后,这只幸运猫将在两台远程机器之间移动。

从本地传输到远程
使用以下命令将文件从本地电脑传输到远程服务器:
scp [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
使用 scp 命令传输文件时需要输入远程服务器的密码。输入后即完成。

从远程传输到本地
要反向执行此过程,你无需访问远程服务器的终端。在本地电脑的终端中输入此命令:
scp [username]@[IP address of the remote machine]:[path/to/the/file] [path/to/the/location]
如你所见,我们只是交换了命令的两个部分。

在两台远程机器之间传输
现在,让我们在两台远程机器之间传输文件。这一步需要两台远程机器的密码,所以请确保你已经准备好。使用这个命令在两台远程计算机之间传输文件:
scp [username of the 1st remote machine]@[IP address of the 1st remote machine]:[path/to/the/file] [username of the 2nd remote machine]@[IP address of the 2nd remote machine]:/[path/to/location]

其他常见的 SCP 命令
最常见的 SCP 命令包括从远程传输到本地、从本地传输到远程,以及在两个远程主机之间传输。但让我们继续探索其他有用的 scp 用法。
1. 递归复制整个目录
假设你想传输整个目录及其包含的所有文件。逐个传输这些文件会非常耗时。你可以使用 scp 传输多个文件的命令来递归复制一个目录:
scp -r [Path/to/directory] [username of the remote server]@[Ip address]:/[path/to/the/location]
这对许多场景都很有用:
- Code Deployment: 部署代码或网络应用时,你可能需要传输包含文件和脚本等所有组件的整个目录。
- 备份和同步: 如果你想备份整个目录,或想同步本地机器和远程服务器上的两个目录,你需要递归复制所有内容。
- System Migration: 系统迁移中的一个关键任务是复制和传输所有重要信息。使用带 -r 选项的 SCP 命令可以确保你不会遗漏迁移过程中的任何内容。
2. 限制带宽使用
如果你想控制数据传输的速率,可以使用以下命令:
scp -l <limit> [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
那你为什么要这样做呢?
在这两种场景下,你可以使用 scp 语法来限制带宽:
- Network Congestion: 如果你的网络流量很大,限制 scp 的带宽可以帮助分配网络资源。限制 SCP 带宽可以确保其他网络任务正常运行。这在通过共享网络传输文件时也很重要,因为你的传输进程可能会影响其他用户的网络活动。
- Background Transfers: 在自动备份或同步等后台 SCP 传输过程中,这些任务可能会大量消耗你的网络资源。此时,你可以限制这些传输过程的带宽来更好地管理资源。
3. 获取详细日志
使用 SCP 的 -v 选项可以获得关于传输过程的详细日志和额外信息。使用下面的命令可以获得详细的反馈和信息:
scp -v [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
以下是你需要记住并使用这个命令的原因:
- Troubleshooting: 使用此选项可以显示传输的实时进度。你可以看到文件大小和完成百分比等信息。它还会给出错误消息和警告。结合这些数据,你可以在需要时监控和排查传输过程中的问题。
4. 指定 SSH 端口
使用 scp 语法的 -P 选项可以 更改端口。以下是执行此操作的命令:
scp -P [port number] [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
这对以下情况很有用:
- Firewall Configuration: 如果默认端口被限制,或者你想隐藏该服务以防止潜在威胁,你可以更改端口。
SCP 有什么替代方案吗?
SCP 速度快且安全,掌握正确的 scp 语法和一些故障排除知识后,它可以是你唯一需要的工具。不过了解一些替代方案也无妨。
1. rsync
rsync 是一个多功能的文件传输工具,具有高级同步功能、增量传输以及远程和本地复制能力。它只传输源文件和目标文件之间的差异,从而可以减少带宽使用。使用 rsync 的另一个优势是它可以从中断的位置继续传输文件。
rsync Pros
- 高效同步文件和目录。
- 支持增量传输算法,减少数据转移。
- 可恢复中断的传输。
rsync Cons
- 源系统和目标系统都需要安装 rsync。
- 相比 scp,需要更多的设置和命令选项。
2. SFTP (SSH 文件传输协议)
SFTP 提供了一种通过 SSH 安全传输文件的方式。它的功能与 FTP 类似,但通过加密的 SSH 连接运行,就像 SCP 一样。不过在某些方面,SFTP 的优势超过了 SCP。SCP 无法生成目录列表、创建或删除目录等。而 SFTP 可以完成这些任务。
SFTP Pros
- 使用加密方式安全传输文件。
- 具备远程文件管理功能。
- 在大多数 Linux 和 Unix 系统上广泛可用。
SFTP Cons
- 命令语法和用法与传统 FTP 不同。
- 在某些嵌入式系统或设备上的支持可能有限。
3. FTP (文件传输协议)
FTP 是一种广泛使用的标准文件传输协议。它采用客户端-服务器模型,提供基本的文件传输功能。
FTP Pros
- 在各种平台上得到广泛支持。
- 提供熟悉的命令行和图形客户端。
FTP Cons
- 缺乏加密,安全性较低,不如 scp 和 sftp 安全。
- 可能需要额外的防火墙配置才能建立连接。
- 明文认证。
总的来说,虽然 scp 是通过 SSH 进行安全文件传输的简单可靠选择,但 rsync、sftp 和 FTP 等替代方案可能会根据特定需求提供更多功能和灵活性。
那么如何选择呢?你应该考虑安全性、同步需求、易用性以及与你的系统和协议的兼容性等因素。例如,如果安全性和数据保密是文件传输中最重要的因素,那么 FTP 就不是好的选择。
Conclusion
SCP 是一个快速且安全的文件传输工具,可用于计算机之间的文件传输。你可以从远程传输到本地,从本地传输到远程,甚至在两个远程系统之间传输文件。虽然存在能胜任的 SCP 替代方案(如 rsync),但 SCP 在许多方面都超越了它们,尤其是在安全性和速度方面。在这篇文章中,我们讨论了 SCP、它的用例、替代方案,还提供了一份备忘单,方便快速查阅常用语法。
FAQ
从远程传输到本地时,SCP 有什么安全隐患需要注意吗?
SCP 是一个相当安全的工具,使用时无需担心安全威胁。不过,建议你采取所有可能的额外安全措施。
使用 SCP 从远程传输到本地时,常见的错误有哪些?
使用 SCP 从远程服务器传输文件到本地计算机时,用户可能会遇到几个常见错误。以下是使用 SCP 远程到本地时最常见的两个错误。
- 没有这样的文件或目录:当你没有指定正确的端口号、文件权限设置不正确或登录信息不正确时,会出现这个错误。
- 主机密钥验证失败:当主机密钥因服务器升级而改变时,会出现此错误。主机密钥表示你之前连接过该服务器,主机密钥验证失败表示服务器身份已更改。这个错误是为了保护你免受连接到欺骗服务器的风险。
我如何使用 SCP 在远程系统之间传输文件?
为了使用 SCP 成功在系统之间传输文件,两台计算机都应该可以通过 SSH 访问。你还需要远程计算机的 IP 地址和密码。剩下的就是使用正确的 SCP 命令。
scp [username of the 1st remote machine]@[IP address of the 1st remote machine]:[path/to/the/file] [username of the 2nd remote machine]@[IP address of the 2nd remote machine]:/[path/to/location]
输入此命令后,系统会要求你提供服务器密码。之后,你的文件就会被传输。