亚马逊云科技如何连接EC2 Mac实例?

开发Apple系统(iPhone、iPad、Watch、TV或Vision Pro)应用程序时,在开发工作流的某些节点上,用户必须使用macOS机器。为了方便起见,用户可以选择通过亚马逊云科技EC2创建macOS实例。本文将为大家介绍在亚马逊云科技云中启动、连接和配置基于macOS的虚拟机教程。

点击进入:https://portal.aws.amazon.com/billing/signup#/start/email

一、CLI:使用SSH连接

使用SSH是最常见的方法。要建立与EC2 Mac实例的SSH连接,有三个前提条件:

  • 在启动实例时,指定了用于用户身份验证的SSH密钥对。注意:SSH密钥对只能在启动实例时指定。如果用户在启动实例时没有指定密钥对,就可以终止实例并在同一台专用主机上启动新实例(在终止实例时,可能需要一段时间来清理数据,然后对应资源才能再次可用)。
  • 实例必须部署在具有公网连接能力的VPC中(VPC包含公共子网),并且实例具有公网IP地址。启动EC2实例时,相关参数的的默认值即指定开通实例的公网连接能力。
  • 用户已将一个安全组与自己的EC2 Mac实例关联。安全组允许来自用户的本地电脑IP地址或客户端网络IP范围的入站TCP 22(SSH)流量访问该实例。

若满足这三个前提条件,则连接macOS实例与连接Linux实例的方法相同。本示例中,密钥对关联的用户名是ec2-user。用户需要使用-i选项来引用存储在本地电脑上的私钥。

用户可以在亚马逊云科技控制台查看EC2实例的IP地址。或者,用户可以在CLI中运行以下命令来查询实例的IP地址。本示例中,当前账户下只有一个mac1.metal实例在运行。命令返回该实例的IP地址是1.0.0.0。

aws ec2 describe-instances \
 --query "Reservations[].Instances[? InstanceType == 'mac1.metal'].NetworkInterfaces[][].Association.PublicIp"
# Response
[
 1.0.0.0
]

使用SSH的-i选项引用私有密钥文件pem,并在命令中指定亚马逊云科技为用户的macOS机器创建的默认用户名。本示例中的用户名为:ec2-user。以下示例代码连接了Big Sur实例(请务必将1.0.0.0替换为用户的实例的IP地址)。

ssh -i ./path_to/my_private_key.pem ec2-user@1.0.0.0

Last login: Fri Jul 1 12:07:28 2022 from 52.95.4.11

 ┌───┬──┐ __| __|_ )
 │ ╷╭╯╷ │ _| ( /
 │ └╮ │ ___|\___|___|
 │ ╰─┼╯ │ Amazon EC2
 └───┴──┘ macOS Big Sur 11.6.6

ec2-user@ip-172-31-44-83 ~ %

连接后,请查看用户的实例的各项信息,了解该实例。检查macOS是否安装成功。

亚马逊云科技

ec2-user包含在/etc/sudoers文件中。就可以使用sudo命令将其权限提升为root。该操作无需密码。

二、CLI:使用Amazon SSM连接

为了提高EC2 Mac实例的安全性和优化管理,用户可以使用Amazon Systems Manager(SSM)的Session Manager功能。

与SSH相比,通过SSM进行连接有两个优点。1.不需要来自本地网络的入站网络连接。SSM代理轮询SSM服务,SSM服务负责将信息(如键盘输入)转发到实例。这意味着EC2 Mac实例只需有一个位于私有VPC中的私有IP地址,并且不需要通过安全组规则允许入站流量。2.不需要使用SSH密钥对来进行用户身份验证。用户可以使用IAM管理实例的连接访问权限。用户可以在IAM上设置允许或不允许某些亚马逊云科技用户或角色连接用户的实例。

在实例上运行的代理必须具有调用SSM API的权限。为了授予相关权限,用户可以创建一个IAM角色,为该角色添加权限,然后将该角色附到EC2实例上。用户可以使用IAM控制台或CLI来完成此操作。

以下教程中,其中一个CLI命令需要用户的EC2 Mac实例的ID。系统可以根据实例的名称搜索实例。

首先,创建一个适用于EC2实例的角色:

# First create the trust policy file 
cat< ec2-role-trust-policy.json
{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Principal": { "Service": "ec2.amazonaws.com"},
 "Action": "sts:AssumeRole"
 }
 ]
}
EOF

# Second, create role
aws iam create-role \
 --role-name ssmAccess \
 --assume-role-policy-document file://ec2-role-trust-policy.json

# Response
{
 "Role": {
 "Path": "/",
 "RoleName": "ssmAccess",
 "RoleId": "AROAXCTVZHOCU72YCLAQT",
 "Arn": "arn:aws:iam::123456789012:role/ssmAccess",
 "CreateDate": "2022-07-01T15:52:13+00:00",
 "AssumeRolePolicyDocument": {
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Principal": {
 "Service": "ec2.amazonaws.com"
 },
 "Action": "sts:AssumeRole"
 }
 ]
 }
 }
}

创建角色后,就需要为其添加权限。用户可以自定义权限策略,也可以使用亚马逊云科技提供的包含SSM完全权限的策略:arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore。此示例中,使用以下策略。

 aws iam attach-role-policy \ 
 --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore \ 
 --role-name ssmAccess-Profile

接下来,将创建一个EC2实例配置文件,把角色附加到该配置文件,然后把该配置文件附加到EC2实例。

# Create an instance profile 
aws iam create-instance-profile \
 --instance-profile-name ssmAccess-Profile

# Response
{
 "InstanceProfile": {
 "Path": "/",
 "InstanceProfileName": "ssmAccess-Profile",
 "InstanceProfileId": "AIPAXCTVZHOC4QNUPTLZT",
 "Arn": "arn:aws:iam::123456789012:instance-profile/ssmAccess-Profile",
 "CreateDate": "2022-07-01T16:02:52+00:00",
 "Roles": []
 }
}

# Attach the role to the profile
aws iam add-role-to-instance-profile \
 --instance-profile-name ssmAccess-Profile \
 --role-name ssmAccess 

# Search for my EC2 Mac Instance Id, search by name=macOS Monterey
INSTANCE_ID=$(aws ec2 describe-instances \
 --filter "Name=tag:Name,Values=macOS Monterey" \
 --query "Reservations[].Instances[?State.Name == 'running'].InstanceId[]" \
 --output text)

# Associate the profile to the instance 
aws ec2 associate-iam-instance-profile \
 --instance-id $INSTANCE_ID \
 --iam-instance-profile Name=" ssmAccess-Profile"

# Response
{
 "IamInstanceProfileAssociation": {
 "AssociationId": "iip-assoc-07d308386ff04f72d",
 "InstanceId": "i-01e833b396e0cbf02",
 "IamInstanceProfile": {
 "Arn": "arn:aws:iam::123456789012:instance-profile/ssmAccess-Profile",
 "Id": "AIPAXCTVZHOC4QNUPTLZT"
 },
 "State": "associating"
 }
}

要签出示例项目,请前往building-rust-applications-for-aws-graviton,然后使用以下命令克隆该存储库:

过程有点长,但操作完成后,该EC2实例就可以访问SSM了。用户可以在启动实例时或实例启动后,将具有SSM访问权限的角色附加到EC2实例。将该角色附加到实例后,在这个macOS实例上运行的所有进程(包括SSM代理)都有权调用SSM API。

初始设置已经完成。下一步,连接实例。用户可以在亚马逊云科技控制台上或使用CLI来连接实例。

进入亚马逊云科技管理控制台,导航到EC2控制台,选择要连接的实例。然后点击Connect(连接)按钮。

亚马逊云科技

在弹出的页面上,确认当前实例满足连接的前提条件,然后点击Connect(连接)。

亚马逊云科技

当实例具有所需的权限时,浏览器中将打开一个黑色的界面。这是一个基于浏览器的shell连接,它连接的是用户的实例。

亚马逊云科技

或者,用户可以使用CLI通过SSM进行连接。

用户需要安装Amazon CLI和相关插件。在本地计算机上,安装适用于Amazon CLI的SSM插件。

# Search for my EC2 Mac Instance Id, search by name=macOS Monterey
INSTANCE_ID=$(aws ec2 describe-instances \
 --filter "Name=tag:Name,Values=macOS Monterey" \
 --query "Reservations[].Instances[?State.Name == 'running'].InstanceId[]" \
 --output text)

aws ssm start-session --target $INSTANCE_ID 

然后,用户就可以连接Mac实例。用户可以运行下列命令来检查是否已连接实例:

Starting session with SessionId: sst-0a9c1047a20fdbd7c

sh-3.2$ uname -a
Darwin ip-172-31-32-67.us-east-2.compute.internal 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64 x86_64

sh-3.2$ diskutil list
/dev/disk0 (internal, physical):
 #: TYPE NAME SIZE IDENTIFIER
 0: GUID_partition_scheme *121.3 GB disk0

/dev/disk1 (external, physical):
 #: TYPE NAME SIZE IDENTIFIER
 0: GUID_partition_scheme *214.7 GB disk1
 1: EFI EFI 209.7 MB disk1s1
 2: Apple_APFS Container disk2 214.5 GB disk1s2

/dev/disk2 (synthesized):
 #: TYPE NAME SIZE IDENTIFIER
 0: APFS Container Scheme - +214.5 GB disk2
 Physical Store disk1s2
 1: APFS Volume Macintosh HD - Data 48.3 GB disk2s1
 2: APFS Volume Preboot 267.0 MB disk2s2
 3: APFS Volume Recovery 1.1 GB disk2s3
 4: APFS Volume Macintosh HD 15.2 GB disk2s4
 5: APFS Snapshot com.apple.os.update-... 15.2 GB disk2s4s1
 6: APFS Volume VM 20.5 KB disk2s6

sh-3.2$ id
uid=502(ssm-user) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),701(com.apple.sharepoint.group.1),100(_lpoperator)

若要结束SSH会话,请运行exit。

使用SSM时,用户将以ssm-user身份(而不是ec2-user)进行验证。这两个用户都包含在/etc/sudoers文件中。用户可以使用sudo命令将用户权限提升为root。该操作无需密码。

使用教程

PetaExpress云服务器调整在线扩容上限教程

2024-6-5 9:33:25

使用教程

阿里云如何查看云服务器实例IP地址?

2024-6-10 11:31:21

相关推荐