使用不同的 SSH 密钥部署私有 EC2 实例(例如 Ec2.pem)和堡垒主机(例如 BastionKey.pem) - AWS VPC
Posted
技术标签:
【中文标题】使用不同的 SSH 密钥部署私有 EC2 实例(例如 Ec2.pem)和堡垒主机(例如 BastionKey.pem) - AWS VPC【英文标题】:Deploying private EC2 instance (say Ec2.pem) and Bastion host (say BastionKey.pem) with different SSH Keys - AWS VPC 【发布时间】:2019-09-16 18:16:49 【问题描述】:我知道不建议在一个帖子中提出多个问题,但它们都是紧密耦合的,因此可以在一个帖子中提问。
我尝试使用 Bastion 主机从互联网通过 SSH 连接到 VPC 中的私有 EC2 实例。我遇到了两种方法。 注意当我启动我的私有 EC2 实例和堡垒主机时,我选择了不同的密钥。(在这两种方法中,我看到作者为 EC2 和堡垒使用相同的密钥)
方法一:如https://www.youtube.com/watch?v=EpFAHis4O4g所示配置SSH ProxyCommand
方法 2:带有 ssh -A 选项的 ssh-agent 命令https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in-a-private-amazon-vpc/
问题1:在方法2中,我做到了
ssh-add ~/Downloads/Ec2.pem
ssh-add ~/Downloads/BastionKey.pem
我将两个密钥都添加到 ssh-agent 的方法是否正确?通过这种方式,我可以在第一步通过 ssh 进入 Bastion,然后作为第二步,我必须显式地通过 ssh 进入私有 EC2。
问题 2: 方法 1 与(方法 2)2 步 ssh 过程的想法相反,但提出了 ProxyCommand,以便最终用户应该能够在一个步骤中直接 ssh 到私有 EC2。这样,Bastion 主机的系统管理员将无法控制 ssh 到单个 EC2 实例。事实上,作者演示了如果您 ssh 到 Bastion 主机(它将成功)然后 ssh 到 EC2 它会失败。我的理解在这里正确吗?
问题 3: 方法 1 不适合我。我对 ~/.ssh/config 使用了相同的结构,但使用了不同的密钥文件路径。我无法直接通过 ssh 连接到我的私有 EC2。我什至尝试了两步过程,但我只能登录堡垒主机,我无法通过 ssh 连接到 EC2。我所有的安全组、ACL、Internet 网关、NAT 网关和 VPC 设置都很好,否则方法 2 将无法正常工作。我可能做错了什么?
cat ~/.ssh/config
HOST bastion
Hostname ec2-5x-xx-xx-xx.compute-1.amazonaws.com
User ec2-user
IdentityFile /Users/myname/Downloads/BastionKey.pem
HOST *.ec2.internal
User ec2-user
IdentityFile /Users/myname/Downloads/Ec2.pem
ProxyCommand ssh -q -W %h:%p bastion
问题 4: 1 和 2 中推荐的方法是什么?当为 Bastion 和 EC2 选择不同的密钥时必须遵循哪些额外步骤?
错误输出:
ssh -v ip-10-0-1-12.ec2.internal
OpenSSH_7.8p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/myname/.ssh/config
debug1: /Users/myname/.ssh/config line 6: Applying options for *.ec2.internal
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Executing proxy command: exec ssh -q -W ip-10-0-1-12.ec2.internal:22 bastion
debug1: identity file /Users/myname/Downloads/Ec2.pem type -1
debug1: identity file /Users/myname/Downloads/Ec2.pem-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.8
/bin/false: No such file or directory
ssh_exchange_identification: Connection closed by remote host
【问题讨论】:
请将您的问题移至Super User(在此处删除,在此处重新发布)。这是off-topic here。 【参考方案1】:HOST bastion
Hostname ec2-example-ip.compute-1.amazonaws.com
User ec2-user
IdentityFile /Users/myname/Downloads/BastionKey.pem
HOST *.ec2.internal
User ec2-user
IdentityFile /Users/myname/Downloads/Ec2/Ec2.pem
ProxyCommand ssh -q -W %h:%p bastion
尝试在您的 ssh 配置中使用堡垒公共 DNS 名称,同时为 VPC 后面的名称使用内部 ec2 DNS 名称。 (AWS DNS 有时充其量只是粗略)
注意:*.ec2.internal 假设您将为通过堡垒访问代理所需的每个 ec2 使用相同的 ssh 密钥。如果不是这种情况,请将 *.ec2.internal 替换为whatever-internal-ip.ec2.internal 并为每个单独的ec2 添加一个条目。
希望这可以解决您的问题。
【讨论】:
不幸的是它仍然不起作用。我已经使用您建议的配置文件(DNS 名称)更新了原始问题,我还粘贴了详细的 ssh 输出。我很惊讶 ssh-agent/ssh-add 方法有效,我可以 ssh 到我的私有 IP,但 ProxyCommand 方法不能。无法弄清楚这里出了什么问题。以上是关于使用不同的 SSH 密钥部署私有 EC2 实例(例如 Ec2.pem)和堡垒主机(例如 BastionKey.pem) - AWS VPC的主要内容,如果未能解决你的问题,请参考以下文章