将文件传输到 Linux 虚拟机


您可以使用不同的方式将文件传输到 Compute Engine 虚拟机实例,具体取决于您的工作站操作系统和目标虚拟机实例操作系统。

从以下操作系统传输 传输至 Linux 虚拟机
Linux 或 macOS
Windows

通过 Cloud Storage 传输文件

Cloud Storage 存储桶可用作您与虚拟机之间的转移点。您可以使用网络浏览器、Google Cloud CLI 或编程语言在 Cloud Storage 和 Compute Engine 虚拟机之间传输文件。

不同的凭据类型可用于上传和下载步骤,以最大限度满足您的需求:

如需使用 Cloud Storage 在计算机和虚拟机之间传输文件,请执行以下操作:

  1. 如果您还没有用于文件传输的存储桶,请创建 Cloud Storage 存储桶
  2. 使用 IAM 权限修改对存储桶的访问权限:
    • 将文件上传到存储桶的账号应具有 Storage Object Admin 角色。
    • 下载文件的账号应具有 Storage Object Viewer 角色。
  3. 登录源设备并将文件上传到存储桶
  4. 登录目标设备,并从完成文件传输的存储桶中下载文件
  5. 可选:删除不再需要的文件,以避免产生任何不必要的存储费用。

如果您需要以相反方向传输文件,则可以反向执行此过程。确保上传文件的账号具有存储桶的写入权限。

通过浏览器使用 SSH 传输文件

如果您可以通过浏览器使用 SSH 与虚拟机建立 SSH 连接,则可以使用该连接向该虚拟机传输文件以及从该虚拟机传输文件。

上传到虚拟机

  1. 在 Google Cloud 控制台中,打开虚拟机实例页面。

    进入“虚拟机实例”

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

    SSH button next to instance name.

  3. 建立连接后,点击上传图标

    上传按钮。

    此时系统会打开上传对话框。

  4. 选择要上传的文件。
  5. 点击上传文件以上传文件。文件会上传到 /home/USER 目录。

从虚拟机下载

  1. 在 Google Cloud 控制台中,打开虚拟机实例页面。

    进入“虚拟机实例”

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

    SSH button next to instance name.

  3. 建立连接后,点击下载图标

    下载按钮。

    此时系统会打开下载对话框。

  4. 路径文本框中,输入要下载的文件的相对文件路径。
  5. 点击下载以下载文件。文件将下载到工作站的默认下载文件夹中。

使用 Google Cloud CLI 传输文件

Google Cloud CLI 通过已建立的 SSH 连接提供安全复制协议 (SCP) 文件传输实用程序。

如需使用 SCP 传输文件,请执行以下操作:

  1. 查看您的防火墙规则并确认端口 22 上的 SSH 连接已获得系统许可;否则,请创建 SSH 防火墙规则
  2. 确保包含要传输的文件的来源设备上已安装 gcloud CLI
  3. 使用 gcloud compute scp 命令将文件传输到目标机器。

以下示例会将文件从工作站复制到虚拟机的主目录:

gcloud compute scp LOCAL_FILE_PATH VM_NAME:REMOTE_DIR

请替换以下内容:

  • LOCAL_FILE_PATH:机器上的文件的路径
  • VM_NAME:您的虚拟机的名称
  • REMOTE_DIR:远程机器上的目录

您还可以从远程机器反向复制文件和目录。以下示例以递归方式将目录从来源复制到目标位置:

gcloud compute scp --recurse VM_NAME:REMOTE_DIR LOCAL_FILE_PATH

如需了解详情,请参阅 gcloud compute scp 参考文档

在 Linux 和 MacOS 工作站上使用 SCP 传输文件

scp 命令行工具的工作方式类似于 gcloud compute scp,但需要您手动管理 SSH 密钥

如需使用 SCP 传输文件,您必须在虚拟机使用的网络上设置防火墙规则,以允许在端口 22 上建立 SSH 连接。如需验证此防火墙规则是否存在,您可以在 Google Cloud 控制台中查找允许 tcp:22 连接的防火墙规则。

转到“防火墙规则”

如果您不具有允许通过端口 22 建立 SSH 连接的防火墙规则,请创建防火墙规则

scp 工具使用的密钥文件与您用于使用标准 SSH 连接实例的密钥文件相同。

  1. 如果您尚未将公钥应用于您的 Google Cloud 控制台项目或虚拟机实例,请创建 SSH 密钥对将公钥添加到项目或实例元数据中

  2. 查找您要向其发送文件的虚拟机的外部 IP。在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  3. 使用 scp 工具将文件从工作站复制到目标虚拟机的主目录。在此示例中,私钥位于 ~/.ssh/my-ssh-key

    scp -i ~/.ssh/my-ssh-key LOCAL_FILE_PATH USERNAME@IP_ADDRESS:~
    

    请替换以下内容:

    • LOCAL_FILE_PATH:您要上传的本地文件的名称
    • USERNAME:您的用户名
    • IP-ADDRESS:您的虚拟机的外部 IP 地址

您还可以将文件从虚拟机复制到本地工作站,只需颠倒来源变量和目的地变量的顺序即可。在此示例中,将文件从虚拟机复制到工作站上的路径。

scp -i ~/.ssh/my-ssh-key USERNAME@IP_ADDRESS:REMOTE_FILE_PATH LOCAL_FILE_PATH

请替换以下内容:

  • USERNAME:您的用户名
  • IP_ADDRESS:您的虚拟机的外部 IP 地址
  • REMOTE_FILE_PATH:您要下载的远程文件的名称
  • LOCAL_FILE_PATH:您要在工作站上下载文件的位置

在 Windows 工作站上使用 WinSCP 传输文件

在 Windows 工作站上,您可以使用 WinSCP 客户端通过图形文件浏览器界面管理实例上的文件。

WinSCP 使用的密钥文件与您用于使用 PuTTY 连接虚拟机的密钥文件相同。

  1. 如果您尚未为实例配置基于密钥的 SSH 身份验证,请执行以下操作:

    1. 使用 PuTTYgen 创建 SSH 密钥对。ssh 私钥必须使用 .ppk 格式,这是 PuTTYgen 创建的密钥的默认格式。

    2. 将 SSH 公钥添加到项目元数据或虚拟机元数据。如需了解详情,请参阅将 SSH 密钥添加到项目元数据将 SSH 密钥添加到实例元数据

  2. 查找您要向其发送文件的虚拟机的外部 IP。

    1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

      转到“虚拟机实例”

    2. 在虚拟机列表中,找到虚拟机的外部 IP 列中的外部 IP 地址。
  3. 下载并安装 WinSCP。对于大多数用户,使用默认安装设置即可。

  4. 启动 WinSCP 程序。此时系统会打开一个登录窗口,您可以在其中配置您的连接设置。

  5. 在 WinSCP 中,配置您的连接设置。

    1. 文件协议字段中选择 SCP 作为文件传输协议。

    2. 主机名字段中,指定要连接到的虚拟机的外部 IP 地址。

    3. 用户名字段中,指定用于访问项目的 Google 用户名。在此示例中,用户为 example-user

      将文件协议设置为 SCP,将主机名设置为 104.196.31.103,将用户名设置为 example-user。

  6. 点击高级下拉列表打开高级设置,然后导航到 SSH > 身份验证

  7. 私钥文件框中,指定为虚拟机创建的 SSH 密钥对的私钥文件的路径。

    在“高级站点设置”中,将私钥文件设置为 my-ssh-key.ppk。

  8. 点击确定以保存高级设置。

  9. 点击登录连接到您的虚拟机。如果连接成功,系统会打开一个窗口,左侧显示本地文件系统,右侧显示虚拟机的文件系统。您可以转到这些文件系统中的不同目录,然后拖动文件,以将这些文件传输到虚拟机或从虚拟机中传输这些文件。

  10. 您可能无权管理虚拟机主目录之外的大多数文件。转到虚拟机的主目录:

    /home/USERNAME
    
  11. 使用 WinSCP 接口在您的工作站和虚拟机之间移动文件。

  12. 将文件复制到虚拟机后,连接您的实例,以便您可以使用完整的 sudo 权限执行或移动文件。

后续步骤