SSH 到 AWS 实例,无需密钥对

Posted

技术标签:

【中文标题】SSH 到 AWS 实例,无需密钥对【英文标题】:SSH to AWS Instance without key pairs 【发布时间】:2011-09-01 11:07:35 【问题描述】:

1:有没有不使用密钥对登录 AWS 实例的方法?我想在一个实例上设置几个站点/用户。但是,我不想提供密钥对供客户登录。

2:在具有指向不同目录的不同域的 1 个 AWS 实例中设置托管站点/用户的最简单方法是什么?

【问题讨论】:

现在可以在 aws 中使用:aws.amazon.com/blogs/compute/… @BMW 而且,有一个官方的python 包装器pip install ec2instanceconnectcli 允许你做mssh <instance id> 【参考方案1】:

问题 1 的答案

这是我在Ubuntu EC2 上所做的:

A) 使用密钥对以 root 身份登录

B) 设置必要的用户及其密码

# sudo adduser USERNAME
# sudo passwd USERNAME

C) 编辑/etc/ssh/sshd_config 设置

有效用户无需密钥即可登录

PasswordAuthentication yes

也希望root也可以无密钥登录

PermitRootLogin yes

D) 重启ssh 守护进程

# sudo service ssh restart

如果你使用 centOS,只需将 ssh 更改为 sshd

现在您无需密钥对即可登录您的ec2 实例。

【讨论】:

谢谢,在 Amazon AMI 上,最后一个命令应该是:“sudo service sshd restart” 谢谢。但这仍然不能解决默认的ec2-user 帐户。 嘿,@シリウス,这也适用于 ec2 用户。您只需要为其设置一个密码,然后就可以使用这个答案了。 我建议不要使用默认帐户,如 ec2-user 或 ubuntu。让其他帐户登录。 在 Ubuntu EC2 上,“sudo service ssh restart”对我有用。【参考方案2】:

1) 您应该能够更改 ssh 配置(在 Ubuntu 上,这通常位于 /etc/ssh/etc/sshd)并重新启用密码登录。

2) AWS 对此并没有什么特别之处 - Apache 可以开箱即用地处理 VHOSTS(虚拟主机) - 允许您指定从某个目录提供某个域。我会在谷歌上搜索有关细节的更多信息。

【讨论】:

在这些情况下(1 个 ip 和多个虚拟主机)你还能使用 HTTPS 吗?您知道解释为所有域设置 openSSL 的文档吗? 所以我在我的问题中解决了这个问题,但由于这是我想澄清的公认答案。这个答案有一个 AWS 特定的组件。 Cloud Init 将作为启动的一部分运行,它将覆盖您使用此方法设置的配置。这就是我的回答所要解决的问题。【参考方案3】:

我通过 Google 来到这里,寻找有关如何设置云初始化以不禁用 AWS 上的 PasswordAuthentication 的答案。两个答案都没有解决问题。如果没有它,如果您创建一个 AMI,那么在实例初始化时 cloud init 将再次禁用此选项。

执行此操作的正确方法是,您需要更正 cloud init 的设置,而不是手动更改 sshd_config(用于在供应期间配置实例的开源工具。阅读更多:https://cloudinit.readthedocs.org/en/latest/)。 cloud init 的配置文件位于: /etc/cloud/cloud.cfg

这个文件用来设置很多cloud init使用的配置。通读此文件,了解您可以在 cloud-init 上配置的项目示例。这包括新创建实例上的默认用户名等项目)

要启用或禁用 SSH 密码登录,您需要更改参数 ssh_pwauth 的值。在文件 /etc/cloud/cloud.cfg 中将参数 ssh_pwauth 从 0 更改为 1 后,烘焙一个 AMI。如果您从这个新出炉的 AMI 启动,它将在配置后启用密码身份验证。

您可以通过检查其他答案中提到的 ssh 配置中 PasswordAuthentication 的值来确认这一点。

【讨论】:

我怀疑这个答案暗示了正确的解决方案,但它写得太差了,我无法理解。 我什至不知道这个文件存在。很好的答案! @JimMaguire 我想我假设了很多背景信息。我已经添加了更多说明。这有帮助吗?你有什么特别的建议想让我采纳吗? 如果在 /etc/cloud/cloud.cfg 中没有找到“PasswordAuthentication”,请在 /etc/cloud/cloud.cfg.d/00_defaults.cfg 中查找“ssh_pwauth”并更改它值从“假”到“真”。【参考方案4】:

最近,AWS 在 Systems Manager 服务中添加了一项名为 Sessions Manager 的功能,该功能允许用户通过 SSH 连接到实例,而无需设置私钥或打开端口 22。我相信身份验证是通过 IAM 和可选的 MFA 完成的。

您可以在这里找到更多信息:

https://aws.amazon.com/blogs/aws/new-session-manager/

【讨论】:

【参考方案5】:

su - root

转到/etc/ssh/sshd_config

vi sshd_config

身份验证:

PermitRootLogin yes

要启用空密码,请更改为是(不推荐)

PermitEmptyPasswords no

更改为 no 以禁用隧道明文密码

PasswordAuthentication yes

:x!

然后重启ssh服务

root@cloudera2:/etc/ssh# service ssh restart
ssh stop/waiting
ssh start/running, process 10978

现在转到 sudoers 文件 (/etc/sudoers)。

用户权限规范

root  ALL=(ALL)NOPASSWD:ALL
yourinstanceuser  ALL=(ALL)NOPASSWD:ALL    / This is the user by which you are launching instance.

【讨论】:

【参考方案6】:

AWS 添加了一项新功能,即 AWS SSM 会话管理器,无需任何开放端口即可连接到实例。 https://aws.amazon.com/blogs/aws/new-session-manager/

我创建了一个简洁的 SSH ProxyCommand 脚本,它在连接到目标实例期间临时将您的公共 ssh 密钥添加到目标实例。这样做的好处是您无需将 ssh(22) 端口添加到安全组即可连接,因为 ssh 连接是通过 ssm 会话管理器建立的。

AWS SSM SSH 代理命令 -> https://gist.github.com/qoomon/fcf2c85194c55aee34b78ddcaa9e83a1

【讨论】:

【参考方案7】:

亚马逊添加了EC2 Instance Connect

有一个官方的脚本来自动化这个过程https://pypi.org/project/ec2instanceconnectcli/

pip install ec2instanceconnectcli

那么就

mssh <instance id>

【讨论】:

以上是关于SSH 到 AWS 实例,无需密钥对的主要内容,如果未能解决你的问题,请参考以下文章

AWS考证方向:使用key密钥连接实例

没有密钥对的SSH aws ec2弹性beantalk

将密钥对添加到现有 EC2 实例

AWS SSH 密钥是不是符合 HIPAA 或 Sox 标准?

AWS SSH 访问密钥生成过程并安装在 EC2 上

将 GitHub ssh 密钥添加到 ec2 实例