为什么我无法通过 SSH 通过 Paramiko 从 AWS Lambda 建立与 EC2 的连接?



上下文:我正试图使用paramiko Python库从AWS Lambda函数(用Python 3.7编写)中SSH到EC2实例中。有问题的EC2实例存在于VPC中。我也知道这个EC2的公共IP。我已经为Paramiko创建了一个lambda层包,并且能够毫无错误地使用import paramiko语句,所以我知道该库运行良好。

尝试的解决方案:我已经利用本教程尝试将SSH连接到上面提到的EC2中。到目前为止,我的代码如下(为了隐私起见,一些信息已被随机化):

import json
import boto3
import paramiko

def lambda_handler(event, context):
s3_client = boto3.client("s3") # Boto3 is the AWS SDK for Python and allows us to manage these 2 services (among other things) 

s3_client.download_file("censored-bucket-name", "keyname.pem", "/tmp/keyname.pem")
ssh_key = paramiko.RSAKey.from_private_key_file("/tmp/keyname.pem") # obj type = PKey

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # setting policy to connect to unknown host and trust it
ssh_client.connect(hostname="3.81.62.55", username="ubuntu", pkey=ssh_key)  # connecting to ec2 server
return {
statusCode': 200, 
body': json.dumps('Commands have been successfully executed ')
}

问题:
我的问题是,在Lambda中运行此代码(使用一个空的测试事件"{}")时,代码只会超时(2分钟),并且根本不会出现错误
即使我的Lambda函数是同一VPC的一部分,使用相同的子网,并且应用了必要的安全组,我似乎也无法连接到EC2
你知道我做错了什么吗?

3.81.62.55公共IP。您必须使用您的实例私有IP或aws为该实例提供的默认EC2 dns url。

最新更新