温暖的水煮鱼 · 《蜘蛛侠:英雄无归》超清4K/1080P ...· 1 月前 · |
兴奋的玉米 · 声息电视剧_剧情介绍,人物角色介绍_365电视剧· 5 月前 · |
老实的弓箭 · 航天员们太空饮食揭秘 | 南方周末· 6 月前 · |
天涯 · 韵母攻略113藏经阁· 6 月前 · |
近视的镜子 · 后台返回的Json为null的字段不显示的方 ...· 1 年前 · |
确保与您的实例关联的安全组允许来自您的 IP 地址的入站 SSH 流量。默认情况下,VPC 的默认安全组不允许传入 SSH 流量。默认情况下,由启动实例向导创建的安全组允许传入的 SSH 流量。有关向 Linux 实例添加入站 SSH 流量规则的步骤,请参阅 用于从您的计算机连接到实例的规则 。有关验证步骤,请参阅 连接到您的实例时出错:连接超时 。
启动实例后,需要几分钟准备好实例,以便您能连接到实例。检查实例以确保它正在运行并通过了状态检查。
通过以下网址打开 Amazon EC2 控制台:
https://console.aws.amazon.com/ec2/
在导航窗格中,选择 Instances (实例) ,然后选择您的实例。
请验证以下内容:
在
Instance state (实例状态)
列中,验证您的实例是否处于
running
状态。
在 Status check (状态检查) 列中,验证您的实例是否已通过两项状态检查。
确保您拥有连接所需的所有信息。有关更多信息,请参阅 连接到您的 Linux 实例 。
有关特定于连接类型(例如 SSH、EC2 Instance Connect、OpenSSH、PuTTY)的先决条件,请参阅以下选项。
如果您的本地计算机操作系统是 Linux 或 macOS X,请检查以下连接选项的特定先决条件:
如果连接到实例时显示错误消息
Network error:
Connection timed out
或
Error connecting to [instance], reason: ->
Connection timed out: connect
,请尝试以下选项:
您需要一条安全组规则,它允许在适当端口上传输来自您的本地计算机公有 IPv4 地址的入站流量。
通过以下网址打开 Amazon EC2 控制台:
https://console.aws.amazon.com/ec2/
在导航窗格中,选择 Instances (实例) ,然后选择您的实例。
在控制台页面底部的 Security (安全) 选项卡上的 Inbound rules (入站规则) 下,检查对所选实例生效的规则列表。
对于 Linux 实例:验证是否有允许流量从您的本地计算机到端口 22 (SSH) 的规则。
对于 Windows 实例:验证是否有允许流量从您的本地计算机到端口 3389 (RDP) 的规则。
如果您的安全组没有允许来自您的本地计算机的入站流量的规则,请向您的安全组添加一条规则。有关更多信息,请参阅 用于从您的计算机连接到实例的规则 。
对于允许入站流量的规则,请检查 Source (源)字段。如果该值是单个 IP 地址,并且如果该 IP 地址不是静态的,则每次重新启动计算机时都会分配一个新的 IP 地址。这将导致该规则不包括您计算机的 IP 地址流量。如果您的计算机位于企业网络上,或者当您通过互联网服务提供商 (ISP) 进行连接时,抑或您的计算机的 IP 地址是动态的,则该 IP 地址可能不是静态的,并且每次重新启动计算机时都会更改。为了确保您的安全组规则允许来自您的本地计算机的入站流量,应该指定您的客户端计算机使用的 IP 地址的范围,而不是为 Source (源)指定单个 IP 地址。
有关安全组规则的更多信息,请参阅 Amazon VPC 用户指南 中的 安全组规则 。
您需要使用某个路由,以将发往 VPC 外部的所有流量发送到 VPC 的 Internet 网关。
通过以下网址打开 Amazon EC2 控制台:
https://console.aws.amazon.com/ec2/
在导航窗格中,选择 Instances (实例) ,然后选择您的实例。
在 Networking (联网) 选项卡上,记下 VPC ID 和 Subnet ID (子网 ID) 的值。
通过以下网址打开 Amazon VPC 控制台:
https://console.aws.amazon.com/vpc/
在导航窗格中,选择 Internet Gateways 。验证是否有 Internet 网关附加到您的 VPC。否则,请选择 Create internet gateway (创建 Internet 网关) ,为 Internet 网关输入名称,然后选择 Create internet gateway (创建 Internet 网关) 。然后,对于您创建的 Internet 网关,依次选择 Actions (操作) 、 Attach to VPC (附加到 VPC) ,选择您的 VPC,然后选择 Attach internet gateway (附加 Internet 网关) 将其附加到您的 VPC。
在导航窗格中,选择 Subnets ,然后选择您的子网。
在
Route Table (路由表)
选项卡上,验证
0.0.0.0/0
的路由是否为目的地以及您的 VPC 的 Internet 网关是否为目标。如果您使用实例的 IPv6 地址连接到实例,请检查是否有一个路由可以将所有 IPv6 流量 (
::/0
) 指向 Internet 网关。否则请执行以下操作:
选择路由表的 ID (rtb- xxxxxxxx ) 以导航到路由表。
在
Routes (路由)
选项卡上,选择
Edit routes (编辑路由)
。选择
Add route (添加路由)
,将
0.0.0.0/0
用作目的地并将 Internet 网关用作目标。对于 IPv6,选择
Add route (添加路由)
,将
::/0
用作目的地并将 Internet 网关用作目标。
选择 Save routes (保存路由)。
网络 ACL 必须允许端口 22(Linux 实例)或端口 3389(Windows 实例)上来自您的本地 IP 地址的入站流量。还须允许到临时端口 (1024-65535) 的出站流量。
通过以下网址打开 Amazon VPC 控制台:
https://console.aws.amazon.com/vpc/
在导航窗格中,选择 Subnets (子网)。
选择您的子网。
对于 Inbound rules (入站规则) ,请在 Network ACL (网络 ACL) 选项卡上验证这些规则是否允许来自所需端口的计算机的入站流量。如果不允许,请删除或修改阻止该流量的规则。
对于 Outbound rules (出站规则) ,验证规则是否允许到您的计算机临时端口的出站流量。如果不允许,请删除或修改阻止该流量的规则。
请询问网络管理员内部防火墙是否允许端口 22 (对于 Linux 实例) 或端口 3389 (对于 Windows 实例) 上来自您的计算机的入站和出站流量。
如果您的计算机有防火墙,请验证其是否允许端口 22 (对于 Linux 实例) 或端口 3389 (对于 Windows 实例) 上来自您的计算机的入站和出站流量。
如果没有,您可以将弹性 IP 地址与您的实例关联。有关更多信息,请参阅 弹性 IP 地址 。
AWS 自动提供数据,例如 Amazon CloudWatch 指标和实例状态,您可以使用这些数据查看实例上 CPU 的负载情况;如有必要,还可以调整负载的处理方式。有关更多信息,请参阅 使用 CloudWatch 监控您的实例 。
您的子网必须与一个路由表关联,此表中具有一个将 IPv6 流量 (
::/0
) 指向 Internet 网关的路由。
您的安全组规则必须允许适当端口 (Linux 的端口 22 和 Windows 的端口 3389) 传输来自本地 IPv6 地址的入站流量。
您的网络 ACL 规则必须允许入站和出站 IPv6 流量。
如果您从旧版 AMI 启动实例,则其可能未针对 DHCPv6 进行配置(IPv6 地址不会在网络接口上自动识别)。有关更多信息,请参阅《Amazon VPC 用户指南》中的 在实例中配置 IPv6 。
您的本地计算机必须拥有 IPv6 地址,且必须配置为使用 IPv6。
如果您尝试连接到您的实例并收到错误消息
unable to load key
... Expecting: ANY PRIVATE KEY
,则说明未正确配置用于存储私有密钥的文件。如果私有密钥文件以
.pem
为结尾,则它可能仍未正确配置。未正确配置私有密钥文件的一个可能原因是缺少证书。
创建新的密钥对。有关更多信息,请参阅 使用 Amazon EC2 创建密钥对 。
另外,您也可以使用第三方工具创建新的密钥对。有关更多信息,请参阅 使用第三方工具创建密钥对,并将公有密钥导入 Amazon EC2 。
将新密钥对添加到您的实例。有关更多信息,请参阅 我丢失了私有密钥。我怎样才能连接到我的 Linux 实例? 。
使用新的密钥对连接到实例。
请在连接时使用
ssh -vvv
获得三倍的详细调试信息:
ssh -vvv -i
path/key-pair-name
.peminstance-user-name
@ec2-203-0-113-25.compute-1.amazonaws.com
下列样本输出演示了如果您尝试使用服务器无法识别的密钥连接实例时您可能会看到的信息:
open/ANT/myusername/.ssh/known_hosts). debug2: bits set: 504/1024 debug1: ssh_rsa_verify: signature correct debug2: kex_derive_keys debug2: set_newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug2: set_newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug2: service_accept: ssh-userauth debug1: SSH2_MSG_SERVICE_ACCEPT received debug2: key: boguspem.pem ((nil)) debug1: Authentications that can continue: publickey debug3: start over, passed a different list publickey debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Trying private key: boguspem.pem debug1: read PEM private key done: type RSA debug3: sign_and_send_pubkey: RSA 9c:4c:bc:0c:d0:5c:c7:92:6c:8e:9b:16:e4:43:d8:b2 debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey debug2: we did not send a packet, disable method debug1: No more authentication methods to try. Permission denied (publickey).
验证私有密钥 (.pem) 文件是否已转换为 PuTTY 可识别的格式 (.ppk)。有关转换您的私有密钥的更多信息,请参阅 使用 PuTTY 从 Windows 连接到 Linux 实例 。
在 PuTTYgen 中,加载私有密钥文件并选择 Save Private Key (保存私有密钥) 而不是 Generate (生成) 。
验证您在连接时是否对为 AMI 使用了正确的用户名称。在 PuTTY Configuration (PuTTY 配置) 窗口的 Host name (主机名) 框中输入用户名。
用于启动实例的 AMI 默认用户名
如果您使用 SSH 连接到实例并出现任何以下错误:
Host key not found in [directory]
、
Permission denied (publickey)
Authentication failed, permission denied
或
Connection closed by [instance] port 22
,请确认您使用的是 AMI 对应的用户名进行连接
并且
为实例指定了正确的私有密钥(
.pem)
文件)。
正确的用户名如下所示:
用于启动实例的 AMI 默认用户名例如,要使用 SSH 客户端连接到从 Amazon Linux 实例,请使用以下命令:
ssh -i
/path/key-pair-name
.peminstance-user-name
@ec2-203-0-113-25.compute-1.amazonaws.com
请确认您使用的私有密钥文件对应于您启动实例时选择的密钥对。
通过以下网址打开 Amazon EC2 控制台:
https://console.aws.amazon.com/ec2/
在导航窗格中,选择 Instances (实例) ,然后选择您的实例。
在 Details (详细信息) 选项卡的 Instance details (实例详细信息) 下,验证 Key pair name (密钥对名称) 的值。
如果您启动实例时没有指定密钥对,则可以终止实例并启动新实例,从而确保指定密钥对。如果这是您一直使用的实例,但您不再有密钥对的
.pem
文件,则可以使用新的密钥对取代该密钥对。有关更多信息,请参阅
我丢失了私有密钥。我怎样才能连接到我的 Linux 实例?
。
如果您已经生成了您自己的密钥对,请确保您的密钥生成器被设置为创建 RSA 密钥。不接受 DSA 密钥。
如果您遇到
Permission denied (publickey)
错误但以上情况都不适用 (例如,您之前能够连接),则可能是实例主目录的权限发生了更改。
/home/
的权限必须限制为仅限所有者。
instance-user-name
/.ssh/authorized_keys
停止您的实例并分离根卷。有关更多信息,请参阅 启动和停止 Amazon EC2 实例 。
在当前实例所在的可用区中启动一个临时实例 (使用与您用于当前实例的 AMI 类似或相同的 AMI),并将根卷附加到此临时实例。
连接临时实例,创建一个挂载点并挂载您附加的卷。
在临时实例中,检查附加的卷的
/home/
目录的权限。如有必要,按如下方式调整权限:
instance-user-name
/
[ec2-user ~]$
chmod 600
mount_point
/home/instance-user-name
/.ssh/authorized_keys
[ec2-user ~]$
chmod 700
mount_point
/home/instance-user-name
/.ssh
[ec2-user ~]$
chmod 700
mount_point
/home/instance-user-name
卸载该卷,将其与临时实例分离,然后将其重新附加到原来的实例。确保为根卷指定正确的设备名称;例如,
/dev/xvda
。
启动您的实例。如果不再需要临时实例,可以终止它。
必须保护您的私钥文件,防止其他任何用户对其进行读写操作。如果除您外其他任何人都能够读取或写入您的私钥,则 SSH 会忽略您的密钥,并且您会看到以下警告消息。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions
0777
for '.ssh/my_private_key.pem
' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: .ssh/my_private_key.pem Permission denied (publickey).
如果在尝试登录到您的实例时看到类似的消息,请检查此错误消息的第一行,验证您为实例使用的公钥是否正确。上述示例利用
.ssh/my_private_key.pem
文件权限使用私钥
0777
,这可使任何人都能读取或写入此文件。此权限级别非常不安全,因此 SSH 会忽略此密钥。
如果从 macOS 或 Linux 连接,请运行以下命令以修复此错误,替入您的私有密钥文件的路径。
[ec2-user ~]$
chmod 0400
.ssh/my_private_key.pem
如果要从 Windows 连接,请在您的本地计算机上执行以下步骤。
导航到您的 .pem 文件。
右键单击 .pem 文件并选择 Properties (属性)。
选择 安全性 选项卡。
选择 Advanced (高级) 。
验证您是否是文件的所有者。如果不是,请将所有者更改为您的用户名。
选择 Disable inheritance (禁用继承) 和 Remove all inherited permissions from this object (从此对象中删除所有继承的权限) 。
选择 Add (添加) 、 Select a principal (选择委托人) ,输入您的用户名,然后选择 OK (确定) 。
从 Permission Entry (权限条目) 窗口,授予 Read (读取) 权限,然后选择 OK (确定) 。
单击 Apply (应用)以确保所有设置都已保存。
选择 OK (确定) 关闭 Advanced Security Settings (高级安全设置) 窗口。
选择 OK (确定) 关闭 Properties (属性) 窗口。
您应该能够通过 SSH 从 Windows 连接到 Linux 实例。
从 Windows 命令提示符处运行以下命令。
在命令提示符下,导航到 .pem 文件的文件路径位置。
运行以下命令以重置和删除显式权限:
icacls.exe
$path
/reset
运行以下命令以向当前用户授予读取权限:
icacls.exe
$path
/GRANT:R "$($env:USERNAME):(R)
"
运行以下命令以禁用继承并删除继承的权限。
icacls.exe
$path
/inheritance:r
您应该能够通过 SSH 从 Windows 连接到 Linux 实例。
如果您使用第三方工具(如
ssh-keygen
)创建 RSA 密钥对,则它会生成 OpenSSH 密钥格式的私有密钥。当您连接到实例时,如果使用 OpenSSH 格式的私有密钥来解密密码,您将收到错误
Private key must begin with "-----BEGIN RSA PRIVATE KEY-----" and end with "-----END RSA
PRIVATE KEY-----"
。
要解决该错误,私有密钥必须采用 PEM 格式。使用以下命令创建 PEM 格式的私有密钥:
ssh-keygen -m PEM
如果您使用 PuTTY 连接到实例并出现以下任一错误:
错误:服务器拒绝了我们的密钥
或
错误:没有支持的身份验证方法
,请确认您使用 AMI 的相应用户名进行连接。在
PuTTY Configuration (PuTTY 配置)
窗口的
User name (用户名)
中键入用户名。
正确的用户名如下所示:
用于启动实例的 AMI 默认用户名
您使用的是否是最新版本的 PuTTY? 有关更多信息,请参阅
PuTTY 网页
已将您的私有密钥 (.pem) 文件正确转换为 PuTTY 可识别的格式 (.ppk)。有关转换您的私有密钥的更多信息,请参阅 使用 PuTTY 从 Windows 连接到 Linux 实例 。
ping
命令是一种 ICMP 流量 — 如果您无法对实例执行 ping 操作,请确保您的入站安全组规则允许的
Echo Request
消息的 ICMP 流量来自所有资源,或来自从中发出命令的计算机或实例。
如果您无法从实例发出
ping
命令,请确保您的出站安全组规则允许的
Echo
Request
消息的 ICMP 流量发送到所有目标,或发送到您正在尝试对其执行 ping 操作的主机。
Ping
由于网络延迟或硬件问题, 命令还可能被防火墙阻止或超时。您应咨询本地网络或系统管理员,以帮助进行进一步的故障排除。
如果您使用 PuTTY 连接到实例并出现“服务器意外关闭了网络连接”错误,请确认您已在 PuTTY Configuration (PuTTY 配置) 的 Connection (连接) 页面上启用 keepalives 以避免断开连接。有些服务器如果在指定的时间内未接收到任何数据,将会断开与客户端的连接。将“Seconds between keepalives”(keepalives 之间的秒数) 设置为 59 秒。
如果在启用 keepalives 后仍出现问题,请尝试在 PuTTY Configuration (PuTTY 配置) 的 Connection (连接) 页面上禁用 Nagle 的算法。
如果您轮换实例主机密钥,则新主机密钥不会自动上传到 AWS 可信主机密钥数据库。当您尝试使用 EC2 Instance Connect 基于浏览器的客户端连接到实例时,会导致主机密钥验证失败,并且无法连接到实例。
要解决此错误,您必须在实例上运行
eic_harvest_hostkeys
脚本,该脚本会将新主机密钥上传到 EC2 Instance Connect。脚本位于 Amazon Linux 2 实例上的
/opt/aws/bin/
和 Ubuntu 实例上的
/usr/share/ec2-instance-connect/
。
使用 SSH 连接到您的实例。
您可以使用 EC2 Instance Connect CLI 或使用在启动实例时为其分配的 SSH 密钥对以及用于启动实例的 AMI 的默认用户名进行连接。对于 Amazon Linux 2,默认用户名是
ec2-user
。
例如,如果实例是使用 Amazon Linux 2 启动的,实例的公有 DNS 名称是
ec2-a-b-c-d.us-west-2.compute.amazonaws.com
,并且密钥对是
my_ec2_private_key.pem
,请使用以下命令通过 SSH 连接到实例:
$
ssh -i
my_ec2_private_key
.pemec2-user
@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
有关连接到实例的更多信息,请参阅 使用 SSH 从 Linux 或 macOS 连接到 Linux 实例 。
导航到以下文件夹。
[ec2-user ~]$
cd /opt/aws/bin/
在您的实例上运行以下命令。
[ec2-user ~]$
./eic_harvest_hostkeys
请注意,调用成功导致没有输出。
现在,您可以使用 EC2 Instance Connect 基于浏览器的客户端连接到您的实例。
使用 SSH 连接到您的实例。
您可以使用 EC2 Instance Connect CLI 或使用在启动实例时为其分配的 SSH 密钥对以及用于启动实例的 AMI 的默认用户名进行连接。对于 Ubuntu,默认用户名是
ubuntu
。
例如,如果实例是使用 Ubuntu 启动的,实例的公有 DNS 名称是
ec2-a-b-c-d.us-west-2.compute.amazonaws.com
,并且密钥对是
my_ec2_private_key.pem
,请使用以下命令通过 SSH 连接到实例:
$
ssh -i
my_ec2_private_key
.pemubuntu
@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
有关连接到实例的更多信息,请参阅 使用 SSH 从 Linux 或 macOS 连接到 Linux 实例 。
导航到以下文件夹。
[ec2-user ~]$
cd /usr/share/ec2-instance-connect/
在您的实例上运行以下命令。
[ec2-user ~]$
./eic_harvest_hostkeys
请注意,调用成功导致没有输出。
现在,您可以使用 EC2 Instance Connect 基于浏览器的客户端连接到您的实例。
如果您使用 EC2 Instance Connect 连接到 Ubuntu 实例,并且尝试连接时出错,则可以使用以下信息尝试修复此问题。
可能的原因
实例上的
ec2-instance-connect
软件包不是最新版本。
将实例上的
ec2-instance-connect
软件包更新到最新版本,如下所示:
使用 EC2 Instance Connect 以外的方法 连接 到实例。
在您的实例上使用以下命令将
ec2-instance-connect
软件包更新到最新版本。
apt update && apt upgrade
如果丢失由 EBS 支持的实例的私有密钥,您可以重新获取对您的实例的访问权限。您必须停止实例,分离卷并将其作为数据卷附加到另一个实例,然后使用新的公有密钥修改
authorized_keys
文件,将卷移回原始实例,并重启实例。有关启动、连接和停止实例的更多信息,请参阅
实例生命周期
。
此过程仅支持具有 EBS 根卷的实例。如果根设备是实例存储卷,则无法使用此过程重新获得对实例的访问权限;您必须拥有私有密钥才能连接到实例。要确定实例的根设备类型,请打开 Amazon EC2 控制台,选择 实例 ,选择相应实例,然后选择 存储 选项卡,并在 根设备详细信息 部分中,检查 根设备类型 的值。
该值为
EBS
或
INSTANCE-STORE
。
如果丢失私有密钥,除以下步骤外,还有其他方法可以连接到 Linux 实例。有关更多信息,请参阅
如果我在 SSH 密钥对初始启动后丢失,该如何连接到 Amazon EC2 实例?
使用 Amazon EC2 控制台或第三方工具创建新的密钥对。如果您要将新密钥对的名称设置为与丢失的私有密钥相同的名称,则必须先删除现有密钥对。有关创建新密钥对的信息,请参阅 使用 Amazon EC2 创建密钥对 或 使用第三方工具创建密钥对,并将公有密钥导入 Amazon EC2 。
请记下以下信息,因为您需要它来完成此过程。
通过以下网址打开 Amazon EC2 控制台:
https://console.aws.amazon.com/ec2/
在导航窗格中选择 Instances (实例) ,然后选择要连接到的实例。(我们将此称为 原始 实例。)
在 Details (详细信息)选项卡上,记下实例 ID 和 AMI ID。
在 Networking (网络)选项卡上,记下可用区。
在
Storage
(存储)选项卡的
Root device name
(根设备名称)下,记下根卷的设备名称(例如
/dev/xvda
)。然后,在
Block devices
(块存储设备)下,查找此设备的名称并记下卷 ID(例如 vol-0a1234b5678c910de)。
依次选择 实例状态 、 停止实例 。如果此选项处于禁用状态,则表示实例已停止,或者其根设备是实例存储卷。
当您停止某个实例时,任何实例存储卷上的数据都将被擦除。要保留实例存储卷中的数据,请确保将其备份到持久性存储中。
在导航窗格中,选择 Instances (实例),然后选择 Launch instances (启动实例)。
在 Name and tags (名称和标签)部分,对于 Name (名称),输入 Temporary (临时)。
在 Application and OS Images (应用程序和操作系统映像)部分中,选择您启动原始实例时所用的 AMI。如果此 AMI 不可用,您可以创建一个可在已停止的实例中使用的 AMI。有关更多信息,请参阅 创建一个由 Amazon EBS 支持的 Linux AMI 。
在 Instance type (实例类型)部分中,保留默认的实例类型。
在 Key pair (密钥对)部分中,对于 Key pair name (密钥对名称),选择现有密钥对进行使用或创建新密钥对。
在 Network settings (网络设置)部分,选择 Edit (编辑),然后为 Subnet (子网),选择与原始实例位于同一可用区的子网。
在 Summary (摘要)面板中,选择 Launch (启动)。
选择 Launch instances (启动实例),然后使用启动向导通过以下选项启动一个 临时 实例:
在 Choose an AMI (选择一个 AMI) 页面上,选择您启动原始实例时所用的 AMI。如果此 AMI 不可用,您可以创建一个可在已停止的实例中使用的 AMI。有关更多信息,请参阅 创建一个由 Amazon EBS 支持的 Linux AMI 。
在 Choose an Instance Type (选择一个实例类型) 页上,保留向导为您选择的默认实例类型。
在 Configure Instance Details (配置实例详细信息) 页面上,请指定与原始实例相同的可用区。如果您在 VPC 中启动实例,请选择此可用区中的一个子网。
在
Add Tags
页面上,向实例添加标签
Name=Temporary
以指示这是一个临时实例。
在 Review 页面上,选择 Launch 。选择您在步骤 1 中创建的密钥对,然后选择 Launch Instances (启动实例)。
在导航窗格中,选择
Volumes
(卷),并选择原始实例的根设备卷(您已在上一步骤中记下它的卷 ID)。依次选择
Actions
(操作)、
Detach Volume
(分离卷),然后选择
Detach
(分离)。等待卷的状态变为
available
。(您可能需要选择“刷新”图标。)
如果卷仍保持选中状态,则选择
Actions
(操作),然后选择
Attach Volume
(附加卷)。选择临时实例的实例 ID,记下在
Device name
(设备名称)下指定的设备名称(例如
/dev/sdf
),然后选择
Attach volume
(附加卷)。
如果已从 AWS Marketplace AMI 启动原始实例,并且卷包含 AWS Marketplace 代码,则必须先停止临时实例,然后才能附加卷。
在临时实例中,挂载附加到实例的卷以访问其文件系统。例如,如果设备名称为
/dev/sdf
,请使用以下命令将卷挂载为
/mnt/tempvol
。
您的实例上显示的设备名称可能不同。例如,作为
/dev/sdf
挂载的设备可能在实例上显示为
/dev/xvdf
。某些版本的 Red Hat(或其变体,如 CentOS)甚至可能将尾部字母增加 4 个字符,其中
/dev/sd
成为
f
/dev/xvd
。
k
使用 lsblk 命令确定卷是否已分区。
[ec2-user ~]$
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 101G 0 disk └─xvdf1 202:81 0 101G 0 part xvdg 202:96 0 30G 0 disk
在前一个示例中,
/dev/xvda
和
/dev/xvdf
是分区卷,而
/dev/xvdg
不是。如果您的卷已分区,则应在后续步骤中挂载分区 (
/dev/xvdf1)
),而不是原始设备 (
/dev/xvdf
)。
创建临时目录以挂载卷。
[ec2-user ~]$
sudo mkdir /mnt/tempvol
使用之前确定的卷名称或设备名称在临时挂载点挂载卷(或分区)。所需命令取决于操作系统的文件系统。请注意,您的实例上显示的设备名称可能不同。有关更多信息,请参阅步骤 6 中的 note 。
[ec2-user ~]$
sudo mount /dev/
xvdf1
/mnt/tempvol
Amazon Linux 2、CentOS、SUSE Linux 12 和 RHEL 7.x
[ec2-user ~]$
sudo mount -o nouuid /dev/
xvdf1
/mnt/tempvol
如果您收到说明文件系统受损的错误,请运行以下命令以使用 fsck 实用程序检查文件系统并修复任何问题:
[ec2-user ~]$
sudo fsck /dev/
xvdf1
在临时实例中,借助临时实例
authorized_keys
中的新公有密钥,在已挂载卷上使用以下命令更新
authorized_keys
。
以下示例使用 Amazon Linux 用户名
ec2-user
。您可能需要使用其他用户名来替换,例如对于 Ubuntu 实例为
ubuntu
。
[ec2-user ~]$
cp .ssh/authorized_keys /mnt/tempvol/home/
ec2-user
/.ssh/authorized_keys
如果复制成功,则可以转到下一步骤。
(可选)如果您没有权限编辑
/mnt/tempvol
中的文件,您必须使用
sudo
更新文件,然后检查文件的权限,以验证您是否能够登录原始实例。请使用以下命令检查文件权限。
[ec2-user ~]$
sudo ls -l /mnt/tempvol/home/ec2-user/.ssh
total 4 -rw------- 1
222 500
398 Sep 13 22:54 authorized_keys
在这个输出示例中,
222
是用户 ID;
500
是组 ID。接下来,请使用
sudo
重新运行失败的复制命令。
[ec2-user ~]$
sudo cp .ssh/authorized_keys /mnt/tempvol/home/
ec2-user
/.ssh/authorized_keys
再次运行以下命令以确定权限是否已更改。
[ec2-user ~]$
sudo ls -l /mnt/tempvol/home/
ec2-user
/.ssh
如果用户 ID 和组 ID 已经更改,请使用以下命令进行恢复。
[ec2-user ~]$
sudo chown
222:500
/mnt/tempvol/home/ec2-user
/.ssh/authorized_keys
在临时实例中,卸载已附加的卷,以将其重新附加到原始实例。例如,使用以下命令卸载
/mnt/tempvol
处的卷。
[ec2-user ~]$
sudo umount /mnt/tempvol
从临时实例中分离卷(您在上一步中卸载了该卷):从 Amazon EC2 控制台,在导航窗格中选择
Volumes
(卷),为原始实例选择根设备卷(您在上一步中记下了卷 ID),依次选择
Actions
(操作)、
Detach volume
(分离卷),然后选择
Detach
(分离)。等待卷的状态变为
available
。(您可能需要选择“刷新”图标。)
将卷重新附加到原始实例:在卷仍保持选中状态时,选择
Actions
(操作),然后选择
Attach Volume
(附加卷)。选择原始实例的实例 ID,请指定您以前在
步骤 2
中记下的原始根设备附加的设备名称(
/dev/sda1
或
/dev/xvda
),然后选择
Attach volume
(附加卷)。
如果您不指定与原始附加相同的设备名称,则无法启动原始实例。Amazon EC2 要求根设备卷位于
sda1
或者
/dev/xvda
。