新闻资讯
领先云端方案商,专注云桌面、云手机研发,凭核心虚拟化技术与云端算力,
打造安全高效数字化平台,提供全周期支持。
分类
相关文章
热门标签

初学者指南aws 跳板机 公钥 配置SSH密钥与实例访问的完整步骤

2026年6月2日

1.

概述与前提

说明:本指南以 Linux 本地机(macOS/Ubuntu)、AWS EC2 为例。
前提:你有 AWS 控制台权限、VPC 与子网已就绪、可创建安全组与 EC2 实例。
目标:通过跳板机(Bastion)安全访问私有子网内实例,不公开 SSH 到 Internet。

2.

准备安全组与网络

创建两个安全组:bastion-sg 与 internal-sg。
bastion-sg:入站允许 TCP 22 来源为你的公网 IP(或公司网段);outbound 可通向 internal-sg。
internal-sg:入站允许 TCP 22 来源为 bastion-sg(使用安全组 ID 作为来源),无公网访问。

3.

本地生成 SSH 密钥对

在本地执行:ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/aws_bastion_key
说明:会生成 aws_bastion_key(私钥)与 aws_bastion_key.pub(公钥),可选填入密码短语。
权限:chmod 600 ~/.ssh/aws_bastion_key,确保私钥权限受保护。

4.

启动跳板机(Bastion)实例

在 AWS 控制台启动 EC2,选择公开子网,指定 bastion-sg,选择或上传密钥对:
- 如果使用 AWS keypair:在“Key pair”选择已有或创建新的,然后下载私钥;
- 如果想用本地公钥:在“Advanced”->User data 使用 cloud-init 将你的 aws_bastion_key.pub 写入 ec2-user 的 authorized_keys,示例 user-data:
#cloud-config
ssh_authorized_keys:\n - "ssh-rsa AAAA... your_email@example.com"

5.

将公钥传到私有实例(目标主机)

启动目标实例到私有子网,安全组为 internal-sg,不分配公网 IP。
方法 A(推荐):先 SSH 到 bastion,再从 bastion 将你的公钥追加到目标实例的 ~/.ssh/authorized_keys:
1) 本地:scp -i ~/.ssh/aws_bastion_key ~/.ssh/id_rsa.pub ec2-user@BASTION_IP:~/
2) 在 bastion:ssh ec2-user@TARGET_PRIVATE_IP 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys' < id_rsa.pub
设置权限:ssh 到目标后执行 chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys。

6.

使用 ssh-agent 与代理转发(可选)

启动代理:eval "$(ssh-agent -s)" && ssh-add ~/.ssh/aws_bastion_key
使用 -A 启用代理转发:ssh -A -i ~/.ssh/aws_bastion_key ec2-user@BASTION_IP。
注意安全:仅在可信 bastion 上启用 Agent Forwarding,避免将私钥暴露给不受信任的主机。

7.

配置本地 ~/.ssh/config 以使用 ProxyJump

在 ~/.ssh/config 添加示例段:
Host bastion\n HostName BASTION_PUBLIC_IP\n User ec2-user\n IdentityFile ~/.ssh/aws_bastion_key
Host target\n HostName TARGET_PRIVATE_IP\n User ec2-user\n IdentityFile ~/.ssh/your_target_key(如果使用相同公钥则可省)\n ProxyJump bastion
然后执行:ssh target,即会通过跳板自动转发连接。

8.

常见权限与错误排查步骤

Permission denied (publickey):检查 authorized_keys 内容与公钥是否完整、文件权限是否正确。
检查安全组:确认 internal-sg 允许 bastion-sg 的 22 端口访问;确认 bastion 的公网 IP 与本地 ssh 目标一致。
SSH 调试:ssh -vvv -i ~/.ssh/aws_bastion_key ec2-user@BASTION_IP 或 ssh -J ec2-user@BASTION_IP ec2-user@TARGET_PRIVATE_IP 查看详细日志。

9.

维护与安全建议

定期轮换密钥;使用较强算法(RSA 4096 或 ed25519)。
最小化跳板权限:Bastion 只允许必要用户登录,启用 CloudWatch Logs 或登录审计。
如果可能,结合 AWS Systems Manager Session Manager 替代跳板以减少公网暴露。

10.

问:可以把私钥上传到跳板机以便直接 SSH 到私有实例吗?

答:不建议上传私钥到跳板机,上传会增大私钥泄露风险。推荐使用 ssh-agent 转发或在跳板上仅存公钥并在目标实例放置对应公钥,或者使用 ProxyJump 从本地直接代理连接。

11.

问:如何在 AWS 控制台直接把本地公钥写入实例?

答:可在 EC2 启动时使用 cloud-init 的 user-data 将公钥写入 ec2-user 的 ~/.ssh/authorized_keys,或通过 EC2 Instance Connect(支持的 AMI)临时注入公钥进行首次访问,之后把持久公钥追加。

12.

问:连接失败如何逐步定位?

答:先确认网络(安全组、子网路由、NACL);再本地用 ssh -vvv 查看密钥是否匹配;登录 bastion 后测试能否 SSH 到目标;检查目标的 /var/log/secure 或 /var/log/auth.log 获取服务端错误信息。


来源:初学者指南aws 跳板机 公钥 配置SSH密钥与实例访问的完整步骤