

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

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

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

使用 SSH 时 Amazon，您正在连接到 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.amazonaws.cn/AWSEC2/latest/UserGuide/using-network-security.html)。

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

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

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

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

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

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

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

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

**使用以下命令检索主节点的公有 DNS 名称 Amazon 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": "###.##.#.###"
   ```

有关更多信息，请参阅 [Amazon CLI中的 Amazon EMR 命令](https://docs.amazonaws.cn/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.amazonaws.cn/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 连接所必需的 Amazon 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.amazonaws.cn/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.amazonaws.cn/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.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)。

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

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

**要使用连接到主节点 Amazon 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. 在主节点上完成工作后，关闭 Amazon CLI 窗口。

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

# Amazon EMR 服务端口
<a name="emr-service-ports"></a>

**注意**  
以下是适用于 Amazon EMR 上的组件的接口和端口。这不是服务端口的完整列表。未列出非默认服务，例如 SSL 端口和不同类型的协议。

**重要**  
在编辑安全组规则以打开端口时要小心。请务必为运行工作负载所需的协议和端口添加仅允许来自可信和经过身份验证的客户的流量的规则。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-service-ports.html)

# 查看 Amazon EMR 集群上托管的 Web 界面
<a name="emr-web-interfaces"></a>

**重要**  
可以配置自定义安全组，以允许对这些 Web 界面的入站访问。请记住，您允许入站流量通过的任何端口，都代表着潜在的安全漏洞。请仔细检查自定义安全组，以确保您最大限度地减少漏洞。有关更多信息，请参阅 [使用 Amazon EMR 集群的安全组控制网络流量](emr-security-groups.md)。

安装在 EMR 集群上的 Hadoop 和其他应用程序会将用户界面发布为主节点上托管的网站。出于安全原因，在使用 Amazon EMR 托管的安全组时，这些网站仅在主节点的本地 Web 服务器上可用。因此，您需要连接到主节点才能查看 Web 界面。有关更多信息，请参阅 [使用 SSH 连接到 Amazon EMR 集群主节点](emr-connect-master-node-ssh.md)。Hadoop 还将用户界面发布为托管在核心节点和任务节点上的网站。这些网站也仅在节点上的本地 Web 服务器上可用。

下表列出了您可以在集群实例上查看的 Web 界面。这些 Hadoop 界面在所有集群上均可用。对于主实例接口，请*master-public-dns-name*替换为 Amazon EMR 控制台中集群**摘要**选项卡上列出的**主实例公有 DNS**。对于核心实例和任务实例接口，请*coretask-public-dns-name*替换为该实例列出的**公有 DNS 名称**。要查找某一实例的**公有 DNS 名称**，请在 Amazon EMR 控制台中，从列表中选择您的集群，选择**硬件**选项卡，选择包含要连接实例的实例组的 **ID**，然后记下为该实例列出的**公有 DNS 名称**。


|  界面名称 |   URI  | 
| --- | --- | 
| Fink 历史记录服务器（EMR 版本 5.33 及更高版本） | http: //: 8082/ master-public-dns-name | 
| Ganglia | http: ///gangliamaster-public-dns-name/ | 
| Hadoop HDFS（6.x 之前的 NameNode EMR 版本） | http: //: 50070/ master-public-dns-name | 
| Hadoop HDFS（6.x 之前的 NameNode EMR 版本） | https: //: 50470/ master-public-dns-name | 
| Hadoop HDFS（ NameNode EMR 版本 6.x） | http: //: 9870/ master-public-dns-name | 
| Hadoop HDFS（ NameNode EMR 版本 6.x） | https: //: 9871/ master-public-dns-name | 
| Hadoop HDFS（6.x 之前的 DataNode EMR 版本） | http: //: 50075/ coretask-public-dns-name | 
| Hadoop HDFS（6.x 之前的 DataNode EMR 版本） | https: //: 50475/ coretask-public-dns-name | 
| Hadoop HDFS（ DataNodeEMR 版本 6.x） | http: //: 9864/ coretask-public-dns-name | 
| Hadoop HDFS（ DataNode EMR 版本 6.x） | https: //: 9865/ coretask-public-dns-name | 
| HBase | http: //: 16010/ master-public-dns-name | 
| Hue | http: //: 8888/ master-public-dns-name | 
| JupyterHub | https: //: 9443/ master-public-dns-name | 
| Livy | http: //: 8998/ master-public-dns-name | 
| 火花 HistoryServer | http: //: 18080/ master-public-dns-name | 
| Tez | http: //: 8080/ master-public-dns-name tez-ui | 
| 纱线 NodeManager | http: //: 8042/ coretask-public-dns-name | 
| 纱线 ResourceManager | http: //: 8088/ master-public-dns-name | 
| Zeppelin | http: //: 8890/ master-public-dns-name | 

由于主节点上有几个特定于应用程序的界面在核心节点和任务节点上不可用，所以本文档中的说明特定于 Amazon EMR 主节点。访问核心节点和任务节点上 Web 界面的方式与访问主节点上 Web 界面的方式相同。

您可以通过多种方式访问主节点上的 Web 界面。最简单快捷的方法，就是使用 SSH 连接到主节点，并使用基于文本的浏览器 Lynx 在 SSH 客户端中查看网站。但是，Lynx 是一个基于文本的浏览器，用户界面有限，无法显示图形。以下示例说明如何使用 Lynx 打开 Hadoop ResourceManager 界面（使用 SSH 登录主节点时还会提供 Lynx URLs ）。

```
lynx http://ip-###-##-##-###.us-west-2.compute.internal:8088/
```

还有两个其他选项可用于访问提供完整浏览器功能的主节点上的 Web 界面。选择下列选项之一：
+ 选项 1（推荐用于更多技术用户）：使用 SSH 客户端连接到主节点，使用本地端口转发配置 SSH 隧道，并使用互联网浏览器打开主节点上托管的 Web 界面。此方法允许您在不使用 SOCKS 代理的情况下配置 Web 界面访问。
+ 选项 2（建议新用户使用）：使用 SSH 客户端连接到主节点，使用动态端口转发配置 SSH 隧道，并将您的互联网浏览器配置 FoxyProxy 为使用插件（例如 Firefox 或 SwitchyOmega Chrome）来管理您的 SOCKS 代理设置。此方法允许您 URLs 根据文本模式自动进行筛选，并将代理设置限制为与主节点 DNS 名称形式相匹配的域名。有关如何为 Firefox 和谷歌浏览器 FoxyProxy 进行配置的更多信息，请参阅[选项 2，第 2 部分：配置代理设置以查看 Amazon EMR 集群主节点上托管的网站](emr-connect-master-node-proxy.md)。

**注意**  
如果您通过集群配置修改应用程序运行所在的端口，则指向该端口的超链接将不会在 Amazon EMR 控制台中更新。这是因为控制台没有读取 `server.port` 配置的功能。

使用 Amazon EMR 5.25.0 或更高版本，可以从控制台访问 Spark 历史记录服务器 UI，而无需通过 SSH 连接设置 Web 代理。有关更多信息，请参阅[一键访问持久性 Spark 历史记录服务器](https://docs.amazonaws.cn/emr/latest/ManagementGuide/app-history-spark-UI.html)。

**Topics**
+ [选项 1：使用本地端口转发设置到 Amazon EMR 主节点的 SSH 隧道](emr-ssh-tunnel-local.md)
+ [选项 2，第 1 部分：使用动态端口转发设置通往主节点的 SSH 隧道](emr-ssh-tunnel.md)
+ [选项 2，第 2 部分：配置代理设置以查看 Amazon EMR 集群主节点上托管的网站](emr-connect-master-node-proxy.md)

# 选项 1：使用本地端口转发设置到 Amazon EMR 主节点的 SSH 隧道
<a name="emr-ssh-tunnel-local"></a>

要连接到主节点上的本地 Web 服务器，您需要在计算机和主节点之间创建 SSH 隧道。这也称为*端口转发（port forwarding）*。如果您不想使用 SOCKS 代理，可以使用本地端口转发设置通往主节点的 SSH 隧道。通过本地端口转发，您可以指定未使用的本地端口，这些端口用于将流量转发到主节点本地 Web 服务器上的特定远程端口。

使用本地端口转发设置 SSH 隧道，需要主节点的公有 DNS 名称和密钥对私有密钥文件。有关如何查找主节点公有 DNS 名称的信息，请参阅[检索主节点的公有 DNS 名称](emr-connect-master-node-ssh.md#emr-connect-master-dns)。有关访问密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。有关您可能希望在主节点上查看的站点的更多信息，请参阅 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

## 使用 OpenSSH 的本地端口转发，设置通往主节点的 SSH 隧道
<a name="ssh-tunnel-local-linux"></a><a name="tunnel-local-linux"></a>

**在终端中使用本地端口转发设置 SSH 隧道**

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

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

1. 键入以下命令在本地计算机上打开 SSH 隧道。 此示例命令通过将本地端口 8157（随机选择的未使用的本地端口）上的流量转发到主节点本地 ResourceManager Web 服务器上的端口 8088 来访问 Web 界面。 

   在命令中，*\$1/mykeypair.pem*替换为文件的`.pem`位置和文件名，*ec2-\$1\$1\$1-\$1\$1-\$1\$1-\$1\$1\$1.compute-1.amazonaws.com*替换为集群的主公有 DNS 名称。 要访问其他 Web 界面，请`8088`替换为相应的端口号。 例如，对于齐柏林飞艇`8088`接`8890`口，请替换为。

   ```
   ssh -i ~/mykeypair.pem -N -L 8157:ec2-###-##-##-###.compute-1.amazonaws.com:8088 hadoop@ec2-###-##-##-###.compute-1.amazonaws.com
   ```

   `-L` 代表使用本地端口转发，由此，您就能指定一个本地端口，用于将数据转发到主节点本地 Web 服务器上标识的远程端口。

   在您发出此命令后，终端保持打开状态并且不返回响应。 

1. 要在浏览器中打开 ResourceManager Web 界面，请在地址栏`http://localhost:8157/`中键入。

1. 如果您已完成使用主节点上的 Web 界面，请关闭终端窗口。

# 选项 2，第 1 部分：使用动态端口转发设置通往主节点的 SSH 隧道
<a name="emr-ssh-tunnel"></a>

要连接到主节点上的本地 Web 服务器，您需要在计算机和主节点之间创建 SSH 隧道。这也称为*端口转发（port forwarding）*。如果您使用动态端口转发创建 SSH 隧道，则路由到指定未使用本地端口的所有流量都将转发到主节点上的本地 Web 服务器。这将创建 SOCKS 代理。然后，您可以将您的互联网浏览器配置为使用插件，例如 FoxyProxy 或 SwitchyOmega 来管理您的 SOCKS 代理设置。

使用代理管理插件可以 URLs 根据文本模式自动进行筛选，并将代理设置限制为与主节点的公有 DNS 名称形式相匹配的域名。当您在查看主节点上托管的网站和互联网上托管的网站之间进行切换时，浏览器附加组件会自动处理打开和关闭代理的操作。

在开始之前，您需要主节点的公有 DNS 名称和密钥对私有密钥文件。有关如何查找主节点公有 DNS 名称的信息，请参阅 [检索主节点的公有 DNS 名称](emr-connect-master-node-ssh.md#emr-connect-master-dns)。有关访问密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。有关您可能希望在主节点上查看的站点的更多信息，请参阅 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

## 使用 OpenSSH 的动态端口转发，设置通往主节点的 SSH 隧道
<a name="emr-ssh-tunnel-linux"></a><a name="emr-ssh-tunnel-unix"></a>

**通过 OpenSSH 使用动态端口转发设置 SSH 隧道**

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

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

1. 键入以下命令以在本地计算机上打开 SSH 隧道。*\$1/mykeypair.pem*替换为文件的`.pem`位置和文件名，*8157*替换为未使用的本地端口号，然后*ec2-\$1\$1\$1-\$1\$1-\$1\$1-\$1\$1\$1.compute-1.amazonaws.com*替换为集群的主公有 DNS 名称。

   ```
   1. ssh -i ~/mykeypair.pem -N -D 8157 hadoop@ec2-###-##-##-###.compute-1.amazonaws.com
   ```

   在您发出此命令后，终端保持打开状态并且不返回响应。
**注意**  
`-D` 表示使用动态端口转发，它允许您指定一个本地端口，用于将数据转发到主节点本地 Web 服务器上的所有远程端口。动态端口转发会创建一个本地 SOCKS 代理，侦听命令中指定的端口。

1. 隧道处于活动状态后，请为您的浏览器配置 SOCKS 代理。有关更多信息，请参阅 [选项 2，第 2 部分：配置代理设置以查看 Amazon EMR 集群主节点上托管的网站](emr-connect-master-node-proxy.md)。

1. 如果您已完成使用主节点上的 Web 界面，请关闭终端窗口。

## 使用动态端口转发设置 SSH 隧道 Amazon CLI
<a name="emr-ssh-tunnel-cli"></a>

你可以在 Windows、Linux、Unix 和 Mac OS X 上使用与主节点创建 SSH 连接。如果你在 Linux、Unix 或 Mac OS X 上使用，则必须按中所示对`.pem`文件设置权限[配置密钥对私有密钥文件权限](emr-connect-master-node-ssh.md#emr-keypair-file-permission-config)。 Amazon CLI Amazon CLI 如果你在 Windows Amazon CLI 上使用，Putty 必须出现在路径环境变量中，否则你可能会收到错误，例如 Open SSH 或 Pu TTY 不可用。<a name="ssh-tunnel-cli"></a>

**要使用动态端口转发设置 SSH 隧道 Amazon CLI**

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

1. 创建与主节点的 SSH 连接，如 [使用 Connect 连接到主节点 Amazon CLI](emr-connect-master-node-ssh.md#emr-connect-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": "AWS CLI cluster"
   ```

1. 键入以下命令，以使用动态端口转发打开通往主节点的 SSH 隧道。在以下示例中，*j-2AL4XXXXXX5T9*替换为群集 ID，*\$1/mykeypair.key*替换为文件（对于 Linux、Unix 和 Mac OS X）或`.ppk`文件（对于 Windows）的位置和文件名。`.pem`

   ```
   aws emr socks --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key						
   ```
**注意**  
socks 命令会自动配置本地端口 8157 上的动态端口转发。目前，此设置无法修改。

1. 隧道处于活动状态后，请为您的浏览器配置 SOCKS 代理。有关更多信息，请参阅 [选项 2，第 2 部分：配置代理设置以查看 Amazon EMR 集群主节点上托管的网站](emr-connect-master-node-proxy.md)。

1. 使用完主节点上的 Web 界面后，关闭 Amazon CLI 窗口。

   有关在中使用 Amazon EMR 命令的更多信息 Amazon CLI，请参阅。[https://docs.amazonaws.cn/cli/latest/reference/emr](https://docs.amazonaws.cn/cli/latest/reference/emr)

## 使用 PuTTY 设置通往主节点的 SSH 隧道
<a name="emr-ssh-tunnel-win"></a>

Windows 用户可以使用 SSH 客户端（如 PuTTY），创建通往主节点的 SSH 隧道。在连接到 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.amazonaws.cn/AWSEC2/latest/UserGuide/putty.html)。<a name="emr-ssh-tunnel-putty"></a>

**通过 PuTTY 使用动态端口转发设置 SSH 隧道**

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

1. 双击 `putty.exe` 以启动 PuTTY。也可以从 Windows 程序列表中启动 PuTTY。
**注意**  
如果您已经有与主节点之间的活动 SSH 会话，则可以通过右键单击 PuTTY 标题栏并选择 **Change Settings**（更改设置）来添加隧道。

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

1. 在 “**主机名**” 字段中，键入**hadoop@***MasterPublicDNS*。例如：**hadoop@***ec2-\$1\$1\$1-\$1\$1-\$1\$1-\$1\$1\$1.compute-1.amazonaws.com*。

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

1. 对于 **Private key file for authentication (用于身份验证的私有密钥文件)**，选择 **Browse (浏览)**，然后选择您生成的 `.ppk` 文件。
**注意**  
PuTTY 本身不支持 Amazon EC2 生成的密钥对私有密钥文件格式（`.pem`）。您可以使用 Pu 将密钥文件TTYgen 转换为所需的 PuTTY 格式 () `.ppk`。您必须将密钥转换为此格式 (`.ppk`)，然后才能尝试使用 PuTTY 连接到主节点。

1. 在 **Category (类别)** 列表中，展开 **Connection (连接) > SSH**，然后选择 **Tunnels (隧道)**。

1. 在 **Source port (源端口)** 字段，键入 `8157`（未使用的本地端口），然后选择 **Add (添加)**。

1. 将 **Destination (目标)** 字段留空。

1. 选择 **Dynamic (动态)** 和 **Auto (自动)** 选项。

1. 选择 **Open (打开)**。

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

1. 隧道处于活动状态后，请为您的浏览器配置 SOCKS 代理。有关更多信息，请参阅 [选项 2，第 2 部分：配置代理设置以查看 Amazon EMR 集群主节点上托管的网站](emr-connect-master-node-proxy.md)。

1. 如果您已完成使用主节点上的 Web 界面，请关闭 PuTTY 窗口。

# 选项 2，第 2 部分：配置代理设置以查看 Amazon EMR 集群主节点上托管的网站
<a name="emr-connect-master-node-proxy"></a>

如果您使用带有动态端口转发的 SSH 隧道，则必须使用 SOCKS 代理管理附加组件来控制浏览器中的代理设置。使用 SOCKS 代理管理工具可以 URLs 根据文本模式自动进行筛选，并将代理设置限制为与主节点的公有 DNS 名称形式相匹配的域。当您在查看主节点上托管的网站和互联网上托管的网站之间进行切换时，浏览器附加组件会自动处理打开和关闭代理的操作。要管理您的代理设置，请将浏览器配置为使用插件，例如 FoxyProxy 或 SwitchyOmega。

有关创建 SSH 隧道的更多信息，请参阅[选项 2，第 1 部分：使用动态端口转发设置通往主节点的 SSH 隧道](emr-ssh-tunnel.md)。有关可用 Web 界面的更多信息，请参阅[查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。



在设置代理附加组件时，请包括以下设置：
+ 使用 **localhost** 作为主机地址。
+ 使用您选择的相同本地端口号与 [选项 2，第 1 部分：使用动态端口转发设置通往主节点的 SSH 隧道](emr-ssh-tunnel.md) 中的主节点建立 SSH 隧道。例如，端口*8157*。此端口还必须与您在 PuTTY 或用于连接的任何其它终端仿真器中使用的端口号相匹配。
+ 指定 **SOCKS v5** 协议。SOCKS v5 允许您有选择地设置用户授权。
+ **URL 模式**

  以下 URL 模式应列入允许列表并使用通配符模式类型指定：
  + **\$1ec2\$1.\$1compute\$1.amazonaws.com\$1** 和 **\$110\$1.amazonaws.com\$1** 模式与美国区域中集群的公有 DNS 名称匹配。
  + **\$1ec2\$1.compute\$1** 和 **\$110\$1.compute\$1** 模式与所有其它区域中集群的公有 DNS 名称匹配。
  +  A **10。 **\$1 模式用于提供对 Hadoop 中JobTracker 日志文件的访问权限。如果此筛选条件与您的网络访问计划冲突，请更改此筛选条件。
  + **\$1.ec2.internal\$1** 和 **\$1.compute.internal\$1** 模式，分别与 `us-east-1` 区域和所有其它区域中集群的私有（内部）DNS 名称相匹配。

## 示例：为 Firefox FoxyProxy 进行配置
<a name="emr-connect-foxy-proxy-chrome"></a>

以下示例演示了 Mozilla Firefox 的 FoxyProxy 标准（版本 7.5.1）配置。

FoxyProxy 提供了一组代理管理工具。该工具有便于您将代理服务器用于 URL，这些 URL 与 Amazon EMR 集群中 Amazon EC2 实例所使用的域对应模式相匹配。<a name="foxy-proxy"></a>

**FoxyProxy 使用 Mozilla Firefox 进行安装和配置**

1. 在 Firefox 中，前往 [https://addons.mozilla.org/](https://addons.mozilla.org/) 搜索 FoxyProxy Standard，然后按照说明添加 FoxyProxy 到 Firefox。

1. 使用文本编辑器，根据以下示例配置创建名为 `foxyproxy-settings.json` 的 JSON 文件。

   ```
   {
     "k20d21508277536715": {
       "active": true,
       "address": "localhost",
       "port": 8157,
       "username": "",
       "password": "",
       "type": 3,
       "proxyDNS": true,
       "title": "emr-socks-proxy",
       "color": "#0055E5",
       "index": 9007199254740991,
       "whitePatterns": [
         {
           "title": "*ec2*.*compute*.amazonaws.com*",
           "active": true,
           "pattern": "*ec2*.*compute*.amazonaws.com*",
           "importedPattern": "*ec2*.*compute*.amazonaws.com*",
           "type": 1,
           "protocols": 1
         },
         {
           "title": "*ec2*.compute*",
           "active": true,
           "pattern": "*ec2*.compute*",
           "importedPattern": "*ec2*.compute*",
           "type": 1,
           "protocols": 1
         },
         {
           "title": "10.*",
           "active": true,
           "pattern": "10.*",
           "importedPattern": "http://10.*",
           "type": 1,
           "protocols": 2
         },
         {
           "title": "*10*.amazonaws.com*",
           "active": true,
           "pattern": "*10*.amazonaws.com*",
           "importedPattern": "*10*.amazonaws.com*",
           "type": 1,
           "protocols": 1
         },
         {
           "title": "*10*.compute*",
           "active": true,
           "pattern": "*10*.compute*",
           "importedPattern": "*10*.compute*",
           "type": 1,
           "protocols": 1
         },
         {
           "title": "*.compute.internal*",
           "active": true,
           "pattern": "*.compute.internal*",
           "importedPattern": "*.compute.internal*",
           "type": 1,
           "protocols": 1
         },
         {
           "title": "*.ec2.internal* ",
           "active": true,
           "pattern": "*.ec2.internal*",
           "importedPattern": "*.ec2.internal*",
           "type": 1,
           "protocols": 1
         }
       ],
       "blackPatterns": []
     },
     "logging": {
       "size": 100,
       "active": false
     },
     "mode": "patterns",
     "browserVersion": "68.12.0",
     "foxyProxyVersion": "7.5.1",
     "foxyProxyEdition": "standard"
   }
   ```

1. 打开 Firefox **Manage Your Extensions (管理您的扩展)** 页面（转到 **about:addons**，然后选择 **Extensions (扩展)**）。

1. 选择 “**FoxyProxy 标准**”，然后选择 “更多选项” 按钮（看起来像省略号的按钮）。

1. 从下拉列表中选择 **Options (选项)**。

1. 从左侧菜单中选择 **Import Settings (导入设置)**。

1. ****在 **“导入设置”** 页面上，在 ** FoxyProxy 6.0\$1 版本的 “导入设置”** 下选择 “导入设置”，浏览到您创建`foxyproxy-settings.json`的文件的位置，选择该文件，然后选择 “打开”。****

1. 当系统提示覆盖现有设置并保存新配置时，选择 **OK (确定)**。

## 示例：为 chrome SwitchyOmega 进行配置
<a name="switchyomega"></a>

以下示例演示了如何为谷歌浏览器设置 SwitchyOmega扩展程序。 SwitchyOmega 允许您配置、管理和在多个代理之间切换。

**SwitchyOmega 使用谷歌浏览器进行安装和配置**

1. 前往[https://chrome.google.com/webstore/类别/扩展程序](https://chrome.google.com/webstore/category/extensions)，搜索**代理 SwitchyOmega**，然后将其添加到 Chrome。

1. 选择 **New profile (新建配置文件)** 并输入 `emr-socks-proxy` 作为配置文件名称。

1. 选择 **PAC profile (PAC 配置文件)** 然后选择 **Create (创建)**。[代理自动配置 (PAC)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_(PAC)_file) 文件，可帮助您定义应转发到 Web 代理服务器的浏览器请求的允许列表。

1. 在 **PAC 脚本**字段中，将内容替换为以下脚本，该脚本定义了 URLs 应通过 Web 代理服务器转发哪些脚本。如果您在设置 SSH 隧道时指定了不同的端口号，请将其*8157*替换为您的端口号。

   ```
   function FindProxyForURL(url, host) {
       if (shExpMatch(url, "*ec2*.*compute*.amazonaws.com*")) return 'SOCKS5 localhost:8157';
       if (shExpMatch(url, "*ec2*.compute*")) return 'SOCKS5 localhost:8157';
       if (shExpMatch(url, "http://10.*")) return 'SOCKS5 localhost:8157';
       if (shExpMatch(url, "*10*.compute*")) return 'SOCKS5 localhost:8157';
       if (shExpMatch(url, "*10*.amazonaws.com*")) return 'SOCKS5 localhost:8157';
       if (shExpMatch(url, "*.compute.internal*")) return 'SOCKS5 localhost:8157';
       if (shExpMatch(url, "*ec2.internal*")) return 'SOCKS5 localhost:8157';
       return 'DIRECT';
   }
   ```

1. 在 **Actions (操作)** 下，选择 **Apply changes (应用更改)** 以保存您的代理设置。

1. 在 Chrome 工具栏上，选择 SwitchyOmega 并选择`emr-socks-proxy`配置文件。

## 访问浏览器中的 Web 界面
<a name="connect-to-web-ui-browser"></a>

要打开 Web 界面，请在浏览器地址栏中输入主节点或核心节点的公有 DNS 名称，后跟所选界面的端口号。以下示例显示了您为连接到 Spark 而需要输入的网址 HistoryServer。

```
http://master-public-dns-name:18080/				
```

有关检索节点的公有 DNS 名称的说明，请参阅[检索主节点的公有 DNS 名称](emr-connect-master-node-ssh.md#emr-connect-master-dns)。有关 Web 界面的完整列表 URLs，请参阅[查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。