我想使用堡垒主机连接到在私有子网中运行的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例。
简短描述
EC2 Linux 实例使用 SSH 密钥对文件(而非 SSH 用户名和密码)作为默认的身份验证方法。要使用堡垒主机进行连接,请在客户端上使用 ssh-agent 转发。ssh-agent 无需使用堡垒机中的私钥即可将管理员从堡垒机连接到另一个实例。
默认情况下,大多数 Linux 和 macOS 发行版都包含 openssh-clients 软件包,其中含有 ssh-agent。对于 Windows 发行版,请使用 PuTTY 连接到 Linux 实例,并使用 Pageant 管理私钥。安装 Pageant 后,您可以使用 PuTTY 中的代理转发选项连接到私有子网中的实例。
**重要事项:**为了维护安全的环境,切勿在堡垒主机上存储私钥。
解决方法
**注意:**ssh-agent 在内存中运行,因此每次打开新的终端会话或重启计算机时都必须重复以下步骤。
**先决条件:**确保您的配置具有以下设置:
- 堡垒主机位于虚拟私有云 (VPC) 的公有子网中。
- 私有子网中实例的安全组仅允许来自堡垒主机的 SSH 连接。
- 堡垒主机的安全组仅允许来自已知和可信 IP 地址通过端口 TCP/22 进行 SSH 连接。
在 macOS 或 Linux 客户端上配置 ssh-agent 转发
完成以下步骤:
-
运行以下命令,在后台启动 ssh-agent:
eval $(ssh-agent)
-
运行以下命令,将 SSH 密钥添加到 ssh-agent:
ssh-add "/path/to/key.pem"
**注意:**将 path/to/key 替换为本地计算机上 .pem 文件的路径。ssh-agent 会将您的 SSH 密钥存储到内存中。
-
运行以下命令,验证 ssh-agent 是否已存储该密钥:
ssh-add -l
**注意:**验证密钥是否在输出中显示。
输出示例:
# 2048 SHA256:abc123... /home/user/.ssh/my-key.pem (RSA)
-
运行以下命令,在启用 ssh-agent 转发的情况下连接到堡垒主机:
ssh -A User@Bastion_Host_IP_Address
**注意:**将 User 替换为您的用户名,将 Bastion_Host_IP_address 替换为您的堡垒主机的 IP 地址。要查看您的亚马逊机器映像 (AMI) 的默认用户名,请参阅默认用户名。要使用 ssh-forwarding,请使用 -A 标志而非 -i 标志。使用 ssh-agent 时,SSH 会自动使用加载到内存中的密钥。
-
运行以下命令,连接到私有 Linux 实例:
ssh User@Private_instance_IP_address
**注意:**将 User 替换为您的用户名,将 Private_instance_IP_address 替换为您的实例的 IP 地址。
在 Windows 客户端上配置代理转发
完成以下步骤:
- 下载并安装 PuTTY、Pageant 和 PuTTYgen。要下载这些工具,请参阅 PuTTY 网站上的 Download PuTTY(下载 PuTTY)。
- 要使用 PuTTY 连接到您的实例,请使用 PuTTYgen 将您的私钥从 PEM 格式转换为 PuTTY 格式。
**注意:**PuTTY 无法使用 PEM 格式的 SSH 密钥。
- 选择 Start(开始)菜单,然后打开 Pageant。
**注意:**默认情况下,Pageant 在系统托盘中以最小化方式打开。如果 Pageant 图标在系统托盘中不显示,请使用任务栏设置将其添加。有关说明,请参阅 Microsoft 网站上的 Customize the taskbar in Windows(在 Windows 中自定义任务栏)。
- 要添加 SSH 密钥,请打开 Pageant 图标的上下文(右键单击)菜单,然后选择 Add Key(添加密钥)。然后,导航到您的私钥。
**注意:**要查看已添加的密钥,请打开 Pageant 图标的上下文(右键单击)菜单,然后选择 View Keys(查看密钥)。
- 选择 Start(开始)菜单,然后打开 All Programs(所有程序)。
- 选择 PuTTY,然后选择 PuTTY。
- 在 Category(类别)下,选择 Session(会话)。
- 对于Host Name(主机名称),输入 user-name@instance-public-dns 以连接到您实例的公有 DNS 名称。或者,输入 user-name@instance-IPv4-address 以连接到您实例的 IPv4 地址。
**注意:**将 user-name 替换为您的用户名,将 instance-public-dns 替换为您的实例的公有 DNS,将 instance-IPv4-address 替换为您的实例的 IPv4 地址。
- 根据您的需求配置 Connection type(连接类型)和 SSH 的值。对于 Port(端口),输入 22。
- 在 Category(类别)下,展开 Connection(连接)。
- 选择 SSH,然后选择 Auth。
- 选择 Allow agent forwarding(允许代理转发)。
- 选择 Open(打开)。
- 要连接到实例,请运行以下命令:
ssh User@Private_instance_IP_address
**注意:**将 User 替换为您的用户名,将 Private_instance_IP_address 替换为您的实例的 IP 地址。