使用 SCP 在本地与 VM 之间传输文件

适用于: ✔️ Linux 虚拟机 ✔️ Windows 虚拟机 ✔️ 灵活规模集

本文介绍如何使用安全复制(SCP)将文件从工作站移动到Azure VM,或从Azure VM 向下移动到工作站。 在工作站和 VM 之间快速安全地移动文件对于管理Azure基础结构至关重要。

对于本文,你需要一台在 Azure 中部署且已启用 SSH 的 VM。 你还需要在本地计算机上安装一个 SCP 客户端。 它基于 SSH 构建,包含在大多数 Linux 和 Windows(10 及更新)安装的默认 shell 中。

快速命令

将文件上传到 VM

scp file azureuser@azurehost:directory/targetfile

从 VM 下载文件

scp azureuser@azurehost:directory/file targetfile

详细指南

例如,我们将Azure配置文件移到 VM,并使用 SCP 拉取日志文件目录。

SSH 密钥对认证

SCP 将 SSH 用于传输层。 SSH 处理目标主机上的身份验证,并在默认情况下使用 SSH 提供的加密隧道中移动文件。 对于 SSH 身份验证,可以使用用户名和密码。 但是,建议使用 SSH 公钥和私钥身份验证作为安全最佳做法。 SSH 对连接进行身份验证后,SCP 将开始复制该文件。 使用正确配置的 ~/.ssh/config SSH 公钥和私钥时,只需使用服务器名称(或 IP 地址)即可建立 SCP 连接。 如果只有一个 SSH 密钥,SCP 在 ~/.ssh/ 目录中查找它,并默认使用它登录到 VM。

有关配置 ~/.ssh/config SSH 公钥和私钥的详细信息,请参阅 创建 SSH 密钥

将文件上传到 VM

对于第一个示例,我们将Azure配置文件复制到用于部署自动化的 VM。 由于此文件包含Azure API 凭据(包括机密),因此安全性非常重要。 SSH 提供的加密隧道保护文件的内容。

以下命令复制本地 .azure/config 文件到具有 FQDN myserver.chinanorth2.chinacloudapp.cn 的 Azure VM。 如果没有 设置 FQDN,也可以使用 VM 的 IP 地址。 Azure VM 上的管理员用户名是 azureuser。 该文件以 /home/azureuser/ 目录为目标。 请将此命令中的值替换为你自己的值。

scp ~/.azure/config azureuser@myserver.chinanorth2.cloudapp.com:/home/azureuser/config

从虚拟机下载目录

在此示例中,我们将日志文件目录从 VM 复制到工作站。 日志文件可能包含敏感或机密数据,也可能不包含此类数据。 但是,使用 SCP 可确保对日志文件的内容进行加密。 日志目录可能包含过多的相关文件,无法一次复制一个,因此在这种情况下,最好下载整个目录。 使用 SCP 传输文件是将日志目录和文件向下传输到工作站的最简单方法,同时也处于安全状态。

以下命令将Azure VM 上的 /home/azureuser/logs/ 目录中的文件复制到本地 /tmp 目录:

scp -r azureuser@myserver.chinanorth2.cloudapp.com:/home/azureuser/logs/. /tmp/

-r 标志指示 SCP 从命令中列出的目录点以递归方式复制文件和目录。 另请注意,命令行语法类似于 cp 复制命令。

后续步骤