

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 scp 在 Lightsail 上的 Linux 实例之间传输文件
<a name="amazon-lightsail-transfer-files-between-linux-instances"></a>

在 Linux 中使用安全复制 (scp) 命令将文件从本地计算机传输到 Linux 或 Unix 实例，以及在 Amazon Lightsail 中从一个实例传输到另一个实例。要了解有关 scp 命令的更多信息，请参阅 *man7* 网站上的 [scp(1) — Linux 手册页面](https://man7.org/linux/man-pages/man1/scp.1.html)。

本教程将引导您完成将文件从一个 Lightsail 实例复制到另一个 Lightsail 实例的步骤。

**Topics**
+ [前提条件](#amazon-lightsail-copy-files-to-linux-instance-prerequisites)
+ [步骤 1：将私有密钥（.pem）文件保存到本地计算机](#get-and-transfer-instance-ssh-key)
+ [步骤 2：更改私有密钥的权限](#copy-private-key-change-permissions)
+ [步骤 3：将私有密钥传输到您的实例](#copy-private-key-to-instance)
+ [第 4 步：在 Lightsail Linux 和 Unix 实例之间安全地传输文件](#transfer-files-between-instances-scp)

## 前提条件
<a name="amazon-lightsail-copy-files-to-linux-instance-prerequisites"></a>
+ 你有两个 Lightsail 实例在运行，两个实例都有公有 IP 地址。要获取实例的公有 IP 地址。登录 [Lightsail 控制台](https://lightsail.aws.amazon.com/)，然后复制显示在您的实例旁边的公有 IP 地址。
+ 您可以使用 SSH 密钥对访问这两个实例。有关更多信息，请参阅 [连接到 Linux 实例](lightsail-how-to-connect-to-your-instance-virtual-private-server.md)。

## 步骤 1：将私有密钥（.pem）文件保存到本地计算机
<a name="get-and-transfer-instance-ssh-key"></a>

完成以下步骤，将私有密钥（.pem）文件保存到本地计算机。目标实例的私有密钥文件用于将文件从一个实例安全地传输到另一个实例。要在同一个 AWS 区域之间复制文件，您需要使用该区域的默认密钥。要在不同区域的实例之间复制文件，您需要使用目标实例所在区域的默认密钥。要了解有关密钥对的更多信息，请参阅[SSH 和连接到您的实例](understanding-ssh-in-amazon-lightsail.md)。

**注意**  
如果您使用的是自己的密钥对，或者使用 Lightsail 控制台创建了密钥对，请找到自己的私钥并使用它来连接您的实例。当你上传自己的密钥或使用 Lightsail 控制台创建密钥对时，Lightsail 不会存储你的私钥。没有您的私有密钥，无法使用 scp 将文件传输到您的实例。

**要将私有密钥（.pem）保存到本地计算机**

1. 登录 [Lightsail 控制台](https://lightsail.aws.amazon.com/)。

1. 在顶部导航栏上选择**用户名**，然后从下拉菜单中选择**账户**。

1. 选择 **SSH Keys**（SSH 密钥）选项卡。

1. 向下滚动到页面的 **Default keys**（默认密钥）部分。

1. 对于要将文件传输到其中的实例所在的 AWS 区域 ，选择默认私有密钥旁边的**下载**。  
![\[Lightsail 控制台中的 SSH 密钥对。\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/managing-key-pairs-download-default-key.png)

1. 将私有密钥保存在您的本地驱动器上的安全位置。

   您可能希望将下载的密钥移动到存储所有 SSH 密钥的目录，例如用户主目录中的“Keys”文件夹。您将需要引用在本指南下一部分保存私有密钥的目录。如果私有密钥尝试使用 `.pem` 以外的格式保存，则应在保存之前手动将格式更改为 `.pem`。

## 步骤 2：更改私有密钥的权限
<a name="copy-private-key-change-permissions"></a>

在以下过程中，您将更改私有密钥文件的权限，以便只有您可以读取和写入该文件。

**要更改私有密钥文件的权限**

1. 在本地机器上打开终端窗口。

1. 输入以下命令，使密钥对的私有密钥只能由您读写。这是某些操作系统所需的最佳安全实践。

   ```
   sudo chmod 400 /path/to/private-key.pem
   ```

   在该命令中，将 `/path/to/private-key` 替换为保存实例所用密钥对的私有密钥的目录路径。

   **示例**：

   ```
   sudo chmod 400 /Users/user/Keys/LightsailDefaultKey-us-west-2.pem
   ```

## 步骤 3：将私有密钥传输到您的实例
<a name="copy-private-key-to-instance"></a>

在以下步骤中，您将通过在本地计算机上运行 scp 命令将私有密钥传输到您的源实例。

**要使用 scp 将私有密钥从您的计算机传输到源实例**

1. 确定私有密钥文件在计算机上的位置以及在实例上的目标路径。在以下示例中，私钥文件的名称是*private-key.pem*，源实例的用户名是*ec2-user*，源实例 IPv4 的地址是*public-ipv4-address*，源实例 IPv6 的地址是*public-ipv6-address*。*destination-path/*是源实例上您要将私钥转移到的位置。
**注意**  
根据实例使用的蓝图，您可以指定以下用户名之一：  
AlmaLinux OS 9、Amazon Linux 2、Amazon Linux 2023、CentOS Stream 9、FreeBSD 和 openSUSE 实例：`ec2-user`
Debian 实例：`admin`
Ubuntu 实例：`ubuntu`
Bitnami 实例：`bitnami`
Plesk 实例：`ubuntu`
cPanel 和 WHM 实例：`centos`
   + (**IPv4**) 要将私钥文件传输到实例，请在计算机上输入以下命令。

     ```
     scp -i /path/private-key.pem /path/private-key.pem ec2-user@public-ipv4-address:path/
     ```
   + (**IPv6**) 要在实例只有 IPv6 地址的情况下将私钥文件传输到该实例，请在您的计算机上输入以下命令。 IPv6 地址必须用方括号 (`[ ]`) 括起来，方括号必须转义 (`\`)。

     ```
     scp -i /path/private-key.pem /path/private-key.pem ec2-user@\[public-ipv6-address\]:path/
     ```

1. 如果您尚未使用 SSH 连接到实例，则会看到如下响应：

   ```
   The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (10.254.142.33)'
   can't be established.
   RSA key fingerprint is 1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f.
   Are you sure you want to continue connecting (yes/no)?
   ```

   输入 **yes**。

1. 如果传输成功，则响应的形式与下方类似：

   ```
   Warning: Permanently added 'ec2-198-51-100-1.compute-1.amazonaws.com' (RSA) 
   to the list of known hosts.
   private-key.pem                                100%   480     24.4KB/s   00:00
   ```

现在，您已将私有密钥传输到源实例，接下来可以安全地连接到目标实例并将文件传输到其中。继续执行下一步，以了解如何操作。

## 第 4 步：在 Lightsail Linux 和 Unix 实例之间安全地传输文件
<a name="transfer-files-between-instances-scp"></a>

在以下过程中，您将从一个实例（**源实例**）运行 scp 命令，以将文件传输到另一个实例（**目标实例**）。

**要使用 scp 在实例之间传输文件**

1. 使用 SSH 连接到**源实例**。您可以使用本地计算机上的终端程序进行连接，也可以使用 Lightsail 中基于浏览器的 SSH 客户端进行连接。有关更多信息，请参阅 [连接到 Linux 实例](lightsail-how-to-connect-to-your-instance-virtual-private-server.md)。

1. 确定源文件在**源实例**上的位置以及在**目标实例**上的目标路径。在以下示例中，私钥文件的名称为*private-key.pem*，实例的用户名为*ec2-user*，实例 IPv4 的地址为*public-ipv4-address*，实例 IPv6 的地址为*public-ipv6-address*。*destination-path/*是**目标实例**上要将文件传输到的位置。
   + (**IPv4**) 要将文件从**源实例**传输到**目标实例**，请从**源实例**输入以下命令。

     ```
     scp -i /path/private-key.pem /path/my-file.txt ec2-user@public-ipv4-address:destination-path/
     ```
   + (**IPv6**) 要将文件从**源实例**传输到**目标实例**，请从**源实例**输入以下命令。 IPv6 地址必须用方括号 (`[ ]`) 括起来，方括号必须转义 (`\`)。

     ```
     scp -i /path/private-key.pem /path/my-file.txt ec2-user@\[public-ipv6-address\]:destination-path/
     ```

1. 如果您尚未使用 SSH 连接到**目标实例**，则会看到如下响应：

   ```
   The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (10.254.142.33)'
   can't be established.
   RSA key fingerprint is 1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f.
   Are you sure you want to continue connecting (yes/no)?
   ```

   输入 **yes**。

1. 如果传输成功，则响应的形式与下方类似：

   ```
   Warning: Permanently added 'ec2-198-51-100-1.compute-1.amazonaws.com' (RSA) 
   to the list of known hosts.
   my-file.txt                                100%   480     24.4KB/s   00:00
   ```