python - 如何从 lambda 函数 ssh 到 EC2 实例
问题描述
我正在尝试在 Lambda 函数中编写我的第一个 Python 代码,该函数将检查我是否能够通过 SSH(端口 22)连接到 EC2 实例。
我已经创建了一个具有安全组 22 CidrIP 我的公共 IP 的 EC2 实例,然后在同一帐户中创建了一个使用 python 3.8 作为运行时的 Lambda 函数
现在,通过代码EC2 Public IP
,我尝试通过传递 SSH 进入 EC2Username
Key pair
并执行一个命令,例如:sudo su
问题:
- 我应该把我的密钥对放在哪里?
- 从 lambda 函数通过 SSH 连接到 EC2 的代码是什么?
解决方案
我要说的第一件事是你几乎不应该从 Lambda SSH 到 EC2。在 EC2 上远程运行脚本有很多更好的方法,包括:
- SSM 运行管理器
- 在 EC2 实例上公开 API 并调用该 API
如果您真的想这样做,也许是出于某种学术原因,那么:
- 将密钥对存储在 Secrets Manager 中并授予 Lambda 读取它的权限
- 使用 Python 包,例如 Fabric 或 Paramiko
[更新:您似乎正在尝试验证 SSH 访问是否被阻止]
验证安全组的最佳方式是使用 EC2 API、描述实例、枚举安全组及其入站规则。如果您不信任这种方法,那么您可以尝试使用我上面建议的方法通过 SSH 连接到实例(尽管您只需要尝试连接即可使测试有用,大概)。
您将遇到的问题是安全组可能已设置为阻止所有 SSH 访问(顺便说一下,这是默认设置),但允许的单个“攻击者”IP 地址除外。您的 Lambda SSH 连接尝试将失败,因为它不是来自那个“攻击者”IP,但您的 Lambda 测试将报告“我无法通过 SSH 访问 Web 服务器,测试成功”。那是无效的测试。
推荐阅读
- c# - 如何在c#中检查双精度值是否为空?
- python - 有没有办法将 2 个数据帧与 labda 函数合并?
- javascript - Vanilla JS 在点击事件中不是这个
- vb.net - 数据库不会自动更新
- django - 如何在 django 中实现结合律?
- php - 如何在数据透视表中搜索两个用户拥有的行
- vue.js - Prismic/GraphQL 和 Gridsome/Vue 渲染的 v-html 显示在字符串中
- css - 草图中的文本垂直对齐方式与 css 中的不同
- python - 仅由 conv2d 层组成的 keras 中的训练网络
- c# - 如何在 xUnit 中模拟 ObjectMapper?