为什么我无法通过 SSH 通过 Paramiko 从 AWS Lambda 建立到我的 EC2 的连接?
Why can't I establish a connection to my EC2 from AWS Lambda via Paramiko over SSH?
上下文: 我正在尝试使用 paramiko Python 库从 AWS Lambda 函数(用 Python 编写)SSH 到 EC2 实例3.7).有问题的 EC2 实例存在于 VPC 中。我也知道这个 EC2 的 public IP。我已经为 Paramiko 创建了一个 lambda 层包,并且能够毫无错误地使用 import paramiko
语句,所以我知道该库工作正常。
尝试的解决方案:
我已经使用 this tutorial 尝试通过 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 分钟)并且根本没有抛出任何错误。
我似乎无法连接到 EC2,即使我的 Lambda 函数是同一 VPC 的一部分,使用相同的子网,并且应用了必要的安全组。
知道我做错了什么吗?
3.81.62.55
是一个 public IP。您必须使用实例 私有 IP 或 aws 为实例提供的默认 EC2 dns url。
上下文: 我正在尝试使用 paramiko Python 库从 AWS Lambda 函数(用 Python 编写)SSH 到 EC2 实例3.7).有问题的 EC2 实例存在于 VPC 中。我也知道这个 EC2 的 public IP。我已经为 Paramiko 创建了一个 lambda 层包,并且能够毫无错误地使用 import paramiko
语句,所以我知道该库工作正常。
尝试的解决方案: 我已经使用 this tutorial 尝试通过 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 分钟)并且根本没有抛出任何错误。
我似乎无法连接到 EC2,即使我的 Lambda 函数是同一 VPC 的一部分,使用相同的子网,并且应用了必要的安全组。
知道我做错了什么吗?
3.81.62.55
是一个 public IP。您必须使用实例 私有 IP 或 aws 为实例提供的默认 EC2 dns url。