我想使用堡垒机连接到在私有子网中运行的 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例。
简短描述
EC2 Linux 实例使用 SSH 密钥对文件作为默认的身份验证方法。密钥对文件无需使用 SSH 用户名和密码。为了维护安全的环境,切勿在堡垒机上存储私钥。要使用堡垒机进行连接,请在客户端上使用 ssh-agent 转发。ssh-agent 允许管理员从堡垒机连接到另一个实例,而无需在堡垒机上存储私钥。
解决方法
先决条件
- 堡垒机必须存在于 VPC 的公有子网中,这样才能通过互联网访问主机。
- 将私有 Linux 实例的安全组配置为仅接受来自堡垒机的 SSH 连接。
- 将堡垒机的安全组配置为仅允许来自已知和可信 IP 地址的 SSH 连接(TCP/22)。
在 macOS 或 Linux 客户端上配置 ssh-agent 转发
**注意:**默认情况下,openssh-clients 包安装在大多数 Linux 和 macOS 发行版上,包含 ssh-agent。
1. 运行以下命令以在后台启动 ssh-agent。ssh-agent 会将您的 SSH 密钥存储到内存中。
# eval $(ssh-agent)
2. 运行以下命令以将 SSH 密钥添加到 ssh-agent:
# ssh-add "/path/to/key.pem"
3. 运行以下命令以验证是否已将密钥添加到 ssh-agent:
# ssh-add -l
4. 运行以下命令以连接到堡垒机。在以下命令中,将 User 和 Bastion_Host_****IP_address 替换为您用例的相应值。
# ssh -A User@Bastion_Host_IP_Address
**注意:**确保在前面的命令中包含 -A 标志。如果您未添加 -A 标志,则 ssh-agent 转发将不起作用,因为未将密钥添加到内存中。将 SSH 密钥添加到内存后,您不必使用 -i 标志指定 SSH 密钥本身。这是因为 SSH 会自动尝试使用 ssh-agent 中保存的所有 SSH 密钥。
5. 连接到堡垒机后,运行以下命令,以连接到私有 Linux 实例。在以下命令中,将 User 和 Private_instance_IP_address 替换为您用例的相应值。
# ssh User@Private_instance_IP_address
如果将私有实例的匹配私钥加载到 ssh-agent 中,则连接成功。
在 Windows 客户端上配置 ssh-agent 转发
您可以使用 PuTTY(适用于 Windows 的免费 SSH 客户端)从 Windows 连接到 Linux VPC 实例。要获取 SSH 代理功能,请使用 Pageant(一种 SSH 身份验证代理)。Pageant 会将您的私钥保存到内存中。安装 Pageant 后,您可以使用 PuTTY 中的代理转发选项连接到私有子网中的实例。
1. 从 PuTTY 下载页面下载并安装 PuTTY 和 Pageant。
2. PuTTY 未原生支持 SSH 密钥的 PEM 格式。要使用 PuTTY 连接到您的实例,请使用 PuTTYgen 将您的私钥从 PEM 格式转换为 PuTTY 格式。PuTTYgen 可从 PuTTY 下载页面获得。有关详细信息,请参阅使用 PuTTYgen 转换私钥。
3. 打开 Pageant 并添加私钥。要将 PuTTY 格式的密钥导入到 Pageant 中,请从开始菜单启动 Pageant 应用程序。默认情况下,Pageant 在系统托盘中以最小化方式打开。
**注意:**如果 Pageant 图标在系统托盘中不可见,请使用任务栏设置将其添加。有关详细信息,请参阅 support.microsoft.com 网站上的自定义任务栏通知区域
4. 要添加您的 SSH 密钥,请右键单击系统托盘中的 Pageant 图标,然后选择添加密钥。要查看添加的密钥,请右键单击系统托盘中的 Pageant 图标,然后选择查看密钥。
5. 完成以下步骤,以启动 PuTTY SSH 会话并打开允许代理转发:
- 从开始菜单中,依次选择所有程序、PuTTY、PuTTY。
- 在类别窗格中,选择会话。
- 在主机名字段中,执行以下一项操作:
要使用您实例的公有 DNS 名称进行连接,请输入 user-name@instance-public-dns。
要使用您实例的 IPv4 地址进行连接,请输入 user-name@instance-IPv4-address。
- 选择连接类型、SSH,并确保端口值为 22。
- 在类别窗格中,展开连接、SSH,然后选择身份验证。
- 选择允许代理转发。
- 选择打开。
6. 您可以从堡垒机连接到 VPC 中的任何实例,而无需在堡垒机上使用 SSH 私钥。使用以下命令连接到其他实例。在以下命令中,将 User 和 Private_instance_IP_address 替换为您用例的相应值。
# ssh User@Private_instance_IP_address
如果将私有实例的匹配私钥加载到 Pageant 中,则连接成功。