

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

# 使用 SSH 连接到 Amazon EMR 集群主节点
<a name="emr-connect-master-node-ssh"></a>

Secure Shell（SSH）是您可用于创建远程电脑安全连接的网络协议。建立连接后，请如同在远程电脑上运行那样，操作您在本地计算机上的终端。您在本地发出的命令会在远程电脑上运行，同时，远程计算机的命令输出将显示在终端窗口中。

使用 SSH 时 AWS，您正在连接到 EC2 实例，该实例是在云中运行的虚拟服务器。与 Amazon EMR 结合使用时，SSH 最常见的用途是连接到充当集群主节点的 EC2 实例。

使用 SSH 连接到主节点可让您监控集群并与集群交互。您可以在主节点上发出 Linux 命令、以交互方式运行应用程序（如 Hive 和 Pig）、浏览目录、读取日志文件等。您还可以在 SSH 连接中创建隧道，以查看主节点上托管的 Web 界面。有关更多信息，请参阅 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

要使用 SSH 连接到主节点，您需要主节点的公有 DNS 名称。此外，与主节点关联的安全组必须具有入站规则，此规则允许来自源（其中包含发起 SSH 连接的客户端）的 SSH（TCP 端口 22）流量。您可能需要添加规则，以允许客户端通过 SSH 连接。有关修改安全组规则的更多信息，请参阅《Amazon EC2 用户指南》**中的 [使用 Amazon EMR 集群的安全组控制网络流量](emr-security-groups.md) 和[向安全组添加规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)。

## 检索主节点的公有 DNS 名称
<a name="emr-connect-master-dns"></a>

您可以使用 Amazon EMR 控制台和 AWS CLI检索主节点的公有 DNS 名称。

------
#### [ Console ]

**使用新控制台检索主节点的公有 DNS 名称**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要检索公有 DNS 名称的集群。

1. 记下显示在集群详细信息页面上 **Summary**（摘要）部分中的 **Primary node public DNS**（主节点公有 DNS）值。

------
#### [ CLI ]<a name="emr-connect-master-dns-cli"></a>

**使用以下命令检索主节点的公有 DNS 名称 AWS CLI**

1. 要检索集群标识符，请键入以下命令。

   ```
   1. aws emr list-clusters
   ```

   输出列出了您的集群，包括集群 IDs。记下您连接的集群的集群 ID。

   ```
   "Status": {
       "Timeline": {
           "ReadyDateTime": 1408040782.374,
           "CreationDateTime": 1408040501.213
       },
       "State": "WAITING",
       "StateChangeReason": {
           "Message": "Waiting after step completed"
       }
   },
   "NormalizedInstanceHours": 4,
   "Id": "j-2AL4XXXXXX5T9",
   "Name": "My cluster"
   ```

1. 要列出集群实例（包括集群的公有 DNS 名称），请键入以下命令之一。*j-2AL4XXXXXX5T9*替换为上一个命令返回的集群 ID。

   ```
   1. aws emr list-instances --cluster-id j-2AL4XXXXXX5T9
   ```

   或：

   ```
   aws emr describe-cluster --cluster-id j-2AL4XXXXXX5T9
   ```

   输出会列出集群实例（包括 DNS 名称和 IP 地址）。记下 `PublicDnsName` 值。

   ```
   "Status": {
       "Timeline": {
           "ReadyDateTime": 1408040779.263,
           "CreationDateTime": 1408040515.535
       },
       "State": "RUNNING",
       "StateChangeReason": {}
   },
   "Ec2InstanceId": "i-e89b45e7",
   "PublicDnsName": "ec2-###-##-##-###.us-west-2.compute.amazonaws.com"
   
   "PrivateDnsName": "ip-###-##-##-###.us-west-2.compute.internal",
   "PublicIpAddress": "##.###.###.##",
   "Id": "ci-12XXXXXXXXFMH",
   "PrivateIpAddress": "###.##.#.###"
   ```

有关更多信息，请参阅 [AWS CLI中的 Amazon EMR 命令](https://docs.aws.amazon.com/cli/latest/reference/emr)。

------

## 在 Linux、Unix 和 Mac OS X 上使用 SSH 和 Amazon EC2 私有密钥连接到主节点
<a name="emr-connect-linux"></a>

要创建使用私有密钥文件进行身份验证的 SSH 连接，您需要在启动集群时指定 Amazon EC2 密钥对私有密钥。有关访问密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

默认情况下，您的 Linux 电脑很可能包含 SSH 客户端。例如，大多数 Linux、Unix 和 macOS 操作系统上都会安装 OpenSSH。您可以通过在命令行键入 **ssh** 来检查 SSH 客户端。如果您的计算机无法识别该命令，请安装 SSH 客户端以连接到主节点。OpenSSH 项目会免费提供一套完整的 SSH 工具执行文件。有关更多信息，请访问 [OpenSSH](http://www.openssh.org/) 网站。

以下说明演示了如何在 Linux、Unix 和 Mac OS X 上打开与 Amazon EMR 主节点的 SSH 连接。<a name="emr-keypair-file-permission-config"></a>

**配置密钥对私有密钥文件权限**

您必须先对 `.pem` 文件设置权限，以便只有密钥所有者才有权访问该文件，然后才能使用 Amazon EC2 密钥对私有密钥创建 SSH 连接。这是使用终端或创建 SSH 连接所必需的 AWS CLI。

1. 确保您已允许入站 SSH 流量。有关说明，请参阅[连接到 Amazon EMR 之前：授权入站流量](emr-connect-ssh-prereqs.md)。

1. 找到您的 `.pem` 文件。这些说明假定文件名为 `mykeypair.pem`，并将其存储在当前用户的主目录中。

1. 键入以下命令以设置权限。*\$1/mykeypair.pem*替换为 keypair 私钥文件的完整路径和文件名。例如 `C:/Users/<username>/.ssh/mykeypair.pem`。

   ```
   1. chmod 400 ~/mykeypair.pem
   ```

   如果您没有对 `.pem` 文件设置权限，您将收到一条错误消息，指出您的密钥文件不受保护，并且密钥将被拒绝。您只需在第一次使用密钥对私有密钥文件时设置权限即可连接。<a name="emr-ssh"></a>

**使用终端连接到主节点**

1. 打开终端窗口。在 Mac OS X 上，选择 **Applications (应用程序) > Utilities (实用程序) > Terminal (终端)**。在其它 Linux 发布版上，终端通常位于 **Applications (应用程序) > Accessories (附件) > Terminal (终端)**。

1. 要建立与主节点的连接，请键入以下命令。*ec2-\$1\$1\$1-\$1\$1-\$1\$1-\$1\$1\$1.compute-1.amazonaws.com*替换为集群的主公有 DNS 名称，*\$1/mykeypair.pem*替换为文件的完整路径和`.pem`文件名。例如 `C:/Users/<username>/.ssh/mykeypair.pem`。

   ```
   1. ssh hadoop@ec2-###-##-##-###.compute-1.amazonaws.com -i ~/mykeypair.pem
   ```
**重要**  
连接到 Amazon EMR 主节点时，必须使用登录名 `hadoop`，否则可能会遇到类似于 `Server refused our key` 的错误。

1. 警告指出无法验证您正在连接的主机真实性。键入 `yes` 以继续。

1.  完成主节点上的工作以后，键入以下命令，以关闭 SSH 连接。

   ```
   exit
   ```

如果您在使用 SSH 连接到主节点时遇到困难，请参阅[排查实例的连接问题](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)。

## 在 Windows 上使用 SSH 连接到主节点
<a name="emr-connect-win"></a>

Windows 用户可以使用 SSH 客户端（如 PuTTY）连接到主节点。在连接到 Amazon EMR 主节点之前，您应该下载并安装 Putty 和 Pu。TTYgen可以从 [PuTTY 下载页面](http://www.chiark.greenend.org.uk/~sgtatham/putty/)下载这些工具。

PuTTY 本身不支持 Amazon EC2 生成的密钥对私有密钥文件格式（`.pem`）。您可以使用 Pu 将密钥文件TTYgen 转换为所需的 PuTTY 格式 () `.ppk`。您必须将密钥转换为此格式 (`.ppk`)，然后才能尝试使用 PuTTY 连接到主节点。

有关转换密钥的更多信息，请参阅 *Amazon EC2 用户指南TTYgen*中的[使用 Pu 转换私钥](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)。<a name="emr-ssh-windows"></a>

**使用 PuTTY 连接到主节点**

1. 确保您已允许入站 SSH 流量。有关说明，请参阅[连接到 Amazon EMR 之前：授权入站流量](emr-connect-ssh-prereqs.md)。

1. 打开 `putty.exe`。也可以从 Windows 程序列表中启动 PuTTY。

1. 如有必要，在 **Category (类别)** 列表中，选择 **Session (会话)**。

1. 在**主机名（或 IP 地址）**中，键入`hadoop@`*MasterPublicDNS*。例如：`hadoop@`*ec2-\$1\$1\$1-\$1\$1-\$1\$1-\$1\$1\$1.compute-1.amazonaws.com*。

1. 在 **类别 (Category)** 列表中，选择 **Connection (连接) > SSH**, **Auth** (SSH,身份验证)。

1. 对于 **Private key file for authentication (用于身份验证的私有密钥文件)**，选择 **Browse (浏览)**，然后选择您生成的 `.ppk` 文件。

1. 依次选择 **Open (打开)**、**Yes (是)** 以取消 PuTTY 安全警告。
**重要**  
登录主节点时，如果系统提示您输入用户名，请键入 `hadoop`。

1. 完成主节点上的工作以后，您可以关闭 PuTTY，从而关闭 SSH 连接。
**注意**  
为了防止 SSH 连接超时，您可以在 **Category (类别)** 列表中选择 **Connection (连接)**，然后选择 **Enable TCP\$1keepalives (启用 TCP\$1keepalives)** 选项。如果在 PuTTY 中有活动的 SSH 会话，则可以通过打开 PuTTY 标题栏的上下文（右键单击）菜单，然后选择 **Change Settings (更改设置)** 来更改设置。

如果您在使用 SSH 连接到主节点时遇到困难，请参阅[排查实例的连接问题](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)。

## 使用 Connect 连接到主节点 AWS CLI
<a name="emr-connect-cli"></a>

你可以在 Windows、Linux、Unix 和 Mac OS X 上使用与主节点创建 SSH 连接。无论平台如何，你都需要主节点的公有 DNS 名称和你的 Amazon EC2 密钥对私钥。 AWS CLI 如果您在 Linux、Unix 或 Mac OS X 上使用，则还必须设置私钥（`.pem`或`.ppk`）文件的权限，如所示[配置密钥对私有密钥文件权限](#emr-keypair-file-permission-config)。 AWS CLI <a name="emr-ssh-cli"></a>

**要使用连接到主节点 AWS CLI**

1. 确保您已允许入站 SSH 流量。有关说明，请参阅[连接到 Amazon EMR 之前：授权入站流量](emr-connect-ssh-prereqs.md)。

1. 要检索集群标识符，请键入：

   ```
   1. aws emr list-clusters
   ```

   输出列出了您的集群，包括集群 IDs。记下您连接的集群的集群 ID。

   ```
   "Status": {
       "Timeline": {
           "ReadyDateTime": 1408040782.374,
           "CreationDateTime": 1408040501.213
       },
       "State": "WAITING",
       "StateChangeReason": {
           "Message": "Waiting after step completed"
       }
   },
   "NormalizedInstanceHours": 4,
   "Id": "j-2AL4XXXXXX5T9",
   "Name": "AWS CLI cluster"
   ```

1. 键入以下命令以打开与主节点的 SSH 连接。在以下示例中，*j-2AL4XXXXXX5T9*替换为群集 ID，*\$1/mykeypair.key*替换为文件（对于 Linux、Unix 和 Mac OS X）或`.ppk`文件（对于 Windows）的完整路径和文件名。`.pem`例如 `C:\Users\<username>\.ssh\mykeypair.pem`。

   ```
   aws emr ssh --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key						
   ```

1. 在主节点上完成工作后，关闭 AWS CLI 窗口。

   有关更多信息，请参阅 [AWS CLI中的 Amazon EMR 命令](https://docs.aws.amazon.com/cli/latest/reference/emr)。如果您在使用 SSH 连接到主节点时遇到困难，请参阅[排查实例的连接问题](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)。