【问题标题】:How to access my instance through SSH writing boto3 code如何通过 SSH 访问我的实例编写 boto3 代码
【发布时间】:2021-06-01 02:22:10
【问题描述】:

用户数据 = 用户数据, SecurityGroupIds=[sg.group_id] )

对于 sys.argv[1:] 中的 bucket_name: 尝试: 响应 = s3.create_bucket(Bucket=ec2-assignbuke2, CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'}) 打印(响应) 除了异常作为错误: 打印(错误)

打印(sg.group_id)

【问题讨论】:

  • 你显示的代码有什么问题?
  • 没什么,我需要通过端口 22 / 80 访问我的实例,但我需要编写 boto3 代码来处理我的安全组,方法是每次创建一个不同的安全组并在创建实例中使用这个新 id这是我被卡住的方法。
  • 仍然不清楚你的问题是什么。如果是“如何为现有安全组配置入口规则”,则使用authorize_security_group_ingress
  • 啊,是的,我在几个小时前尝试过,但我一直收到此错误消息:“AttributeError: 'ec2.ServiceResource' object has no attribute 'authorize_security_group_ingress'”
  • 啊,抱歉,该方法是客户端 API 的一部分,而不是资源 API。如果您手头有 SecurityGroup 资源,则可以使用 authorize_ingress

标签: amazon-web-services amazon-ec2 ssh boto3 aws-ec2-instance-connect


【解决方案1】:

下面是一个 boto3 脚本示例,该脚本在特定 VPC 中创建安全组,授权通过端口 22 和 80 从 Internet 进入,并将 EC2 实例启动到给定 VPC 的公共子网中。

import boto3

ec2 = boto3.resource("ec2", region_name="eu-west-1")

user_data = """#!/bin/bash
yum update -y
yum install httpd -y
systemctl enable httpd
systemctl start httpd"""

# TODO: configure these as needed
VPC_ID = 'vpc-1234'
SUBNET_ID = 'subnet-5678'
AMI_ID = 'ami-0fc970315c2d38f01'
KEYPAIR = 'AlexBpem'

sg = ec2.create_security_group(
    GroupName="MyWebServer", Description="WebServer", VpcId=VPC_ID
)

instance = ec2.create_instances(
    ImageId=AMI_ID,
    MinCount=1,
    MaxCount=1,
    InstanceType="t2.nano",
    KeyName=KEYPAIR,
    UserData=user_data,
    NetworkInterfaces=[
        {
            "SubnetId": SUBNET_ID,
            "DeviceIndex": 0,
            "AssociatePublicIpAddress": True,
            "Groups": [sg.group_id],
        }
    ],
)

response = sg.authorize_ingress(
    IpPermissions=[
        {
            "FromPort": 22,
            "ToPort": 22,
            "IpProtocol": "tcp",
            "IpRanges": [
                {"CidrIp": "0.0.0.0/0", "Description": "internet"},
            ],
        },
        {
            "FromPort": 80,
            "ToPort": 80,
            "IpProtocol": "tcp",
            "IpRanges": [
                {"CidrIp": "0.0.0.0/0", "Description": "internet"},
            ],
        },
    ],
)

如需更多帮助,请阅读How To Create And Configure An AWS VPC With Python

【讨论】:

  • 那段代码更容易理解和使用,而且运行良好。再次感谢 jarmod。
  • 你是否也偶然知道如何将 .pem 文件从 Ubuntu 复制到 SSH,因为它说没有找到 pem 文件,我认为这将是一个简单的解决方案,但似乎不起作用.如果没有,一切都好。
  • 您是说您正在尝试 ssh 到您的新 Ubuntu 实例,但您没有 PEM 文件?
  • 不,当我使用我的 PEM 密钥 SSH 到我的实例时,它不允许我运行任何命令,例如我去复制一些东西到我的 SSH 实例,它给了我这个错误。 “警告:无法访问身份文件 AlexBpem.pem:没有这样的文件或目录。权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)。失去连接”
  • 这听起来正是我刚刚问的。您正在尝试通过 SSH 连接到实例或在远程实例上远程执行命令(这实际上是相同的机制)并且您的 SSH 客户端报告它找不到 AlexBpem.pem。检查您如何向 SSH 客户端提供 PEM 文件名,以及该文件是否实际存在于指定位置。当您更正时,我猜您会遇到其他问题,所以请阅读this helpful article
猜你喜欢
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多