scp
(Secure Copy) 是一个安全地将文件复制到远程主机和从远程主机复制文件的命令。 它在内部使用 SSH 来执行它的操作。
安装 scp 命令
scp
存在于 OpenSSH 客户端包中。 (openssh-server
包提供了 SSH 守护进程,而 openssh-client
包提供了各种与 SSH 相关的工具。)
对于 Ubuntu/Debian(及其衍生产品)
你可以安装 scp
使用 apt 命令:
sudo apt install openssh-client
为了 Fedora/CentOS(基于 RedHat 的发行版及其衍生版)
你可以安装 scp
使用 dnf 命令:
sudo dnf install openssh-clients #the name has an extra 's'
笔记: 通过以下方式传输文件 scp
, 它 应该 出现在发送端和接收端。 如果你尝试 scp
到一台没有的机器 scp
已安装,您可能会收到一条错误消息 scp: command not found
即使你可能有 scp
本地安装。
scp的基本用法
scp 命令的核心是从源获取文件并将其复制到目标。
scp <source> <target>
有多种指定方式 source
和 target
. 一些常见的如下:
从本地机器复制到远程机器
scp path/to/local_file remote_host:path/to/remote_file
这里 remote_host
可
- 一个 IP 地址
- 一个域名
- 定义的主机
/etc/hosts
文件 - 定义的主机
~/.ssh/config
例如,复制一个文件 me.png
在我的主目录中从我的本地机器到我的 ubuntu-server
(定义于 /etc/hosts
),我会打字。
scp /home/pulsar17/me.png ubuntu-server:~/me.png
如果我以用户身份执行此命令 pulsar17
, 同一个用户 必须是 出现在目标机器上的这种语法 target
去工作。
从远程机器复制到本地机器
要从远程机器复制到本地机器,只需切换源和目标。 该命令仍然必须运行 在本地机器上.
scp remote_host:path/to/remote_file path/to/local_directory
对于此命令,执行此命令的用户必须同时出现在本地和远程计算机上。
作为远程机器上的特定用户复制
您还可以在复制时指定用户。 scp
将复制文件并将所有者设置为 user
.
scp path/to/local_file [email protected]_host:path/to/remote_file
以下命令将复制 me.png
到远程机器,但作为用户 juniordev
.
scp /home/pulsar17/me.png [email protected]:~/me.png
通过这种语法,我可以在我有权访问的远程机器上以任何用户的身份进行复制。
以特定用户身份从远程机器复制 只需切换源和目标。
有用的选项
scp
有很多选择。 在这里,我将展示一些有用的。
带有 -r 选项的 scp
使用 -r
您可以选择递归复制目录(所有文件和子目录)。
scp -r /home/pulsar17/scripts ubuntu-server:~/
上面的命令将复制整个 scripts
目录到远程机器。
带有 -p 选项的 scp
此选项指示 scp
保留原始文件中的修改时间、访问时间和模式。
带有 -q 选项的 scp
它启用安静模式。 它还禁用进度表以及来自 ssh 的警告和诊断消息。
scp -q /home/pulsar17/me.png ubuntu-server:~/
SSH配置,方便使用scp
如果你觉得你需要使用 scp
通常,您可以以节省时间和打字的方式设置环境。 以下是您可以实现的两种方法:
将常用主机添加到配置文件中
有两个地方可以将 IP 地址映射到名称,这样您就不必一次又一次地键入 IP 地址 在本地机器上. 这些将是 /etc/hosts
文件和 ~/.ssh/config
.
如果您需要使用 SSH 特定选项,最好使用 ~/.ssh/config
. 我将展示如何使用这两个文件进行配置。 您应该只使用其中之一。
文件~/.ssh/config
打开 ~/.ssh/config
文件在您选择的编辑器中。 我将使用 nano 编辑器:
nano ~/.ssh/config
向其中添加以下几行:
Host ubuntu-server User root HostName 192.168.1.168 #Port 22002 You can specify a port too
Save 文件并退出nano。 您可以在此文件中添加多个主机。 这样配置后就可以替换了 [email protected]_host
配置文件中对应的Host后面的名称。 因此,例如,您可以使用:
# Instead of scp /home/pulsar17/me.png [email protected]:~/me.png just type scp /home/pulsar17/me.png ubuntu-server:~/me.png
/etc/hosts
文件
该文件包含 IP 地址到主机名的映射,如键值映射。 映射 IP 地址 192.168.1.11
对名字 my-server
, 类型:
echo 192.168.1.11$'t'my-server | sudo tee -a /etc/hosts
这 $'t'
是打印文字 Tab
文件中的字符。
完成此操作后,您可以使用 Tab 完成功能来摆脱 bash. 在键入新映射的名称 (my-server
在这种情况下)在 scp
命令只需输入前几个字符并按 Tab
, Bash 会为你自动补全名称。 (不过,您仍然需要用户名。它只会自动完成主机名。)
SSH 密钥而不是密码
要登录到远程机器,您可以使用 SSH 密钥代替传统的基于密码的身份验证。 要设置 SSH 密钥,请按照本教程进行操作。 你只需要做一次。
结论
scp
是一个非常有用的命令,可以安全地将文件从一台机器复制到另一台机器。 在本文中,我们学习了各种选项 scp
以及如何通过设置 ssh 密钥和适当的配置文件来利用它的强大功能。