首页 > 解决方案 > 如何从 lambda 函数 ssh 到 EC2 实例

问题描述

我正在尝试在 Lambda 函数中编写我的第一个 Python 代码,该函数将检查我是否能够通过 SSH(端口 22)连接到 EC2 实例。

我已经创建了一个具有安全组 22 CidrIP 我的公共 IP 的 EC2 实例,然后在同一帐户中创建了一个使用 python 3.8 作为运行时的 Lambda 函数

现在,通过代码EC2 Public IP,我尝试通过传递 SSH 进入 EC2UsernameKey pair

并执行一个命令,例如:sudo su

问题:

  1. 我应该把我的密钥对放在哪里?
  2. 从 lambda 函数通过 SSH 连接到 EC2 的代码是什么?

标签: pythonamazon-web-servicesamazon-ec2sshaws-lambda

解决方案


我要说的第一件事是你几乎不应该从 Lambda SSH 到 EC2。在 EC2 上远程运行脚本有很多更好的方法,包括:

  1. SSM 运行管理器
  2. 在 EC2 实例上公开 API 并调用该 API

如果您真的想这样做,也许是出于某种学术原因,那么:

  1. 将密钥对存储在 Secrets Manager 中并授予 Lambda 读取它的权限
  2. 使用 Python 包,例如 Fabric 或 Paramiko

[更新:您似乎正在尝试验证 SSH 访问是否被阻止]

验证安全组的最佳方式是使用 EC2 API、描述实例、枚举安全组及其入站规则。如果您不信任这种方法,那么您可以尝试使用我上面建议的方法通过 SSH 连接到实例(尽管您只需要尝试连接即可使测试有用,大概)。

您将遇到的问题是安全组可能已设置为阻止所有 SSH 访问(顺便说一下,这是默认设置),但允许的单个“攻击者”IP 地址除外。您的 Lambda SSH 连接尝试将失败,因为它不是来自那个“攻击者”IP,但您的 Lambda 测试将报告“我无法通过 SSH 访问 Web 服务器,测试成功”。那是无效的测试。


推荐阅读