注意:EC2 实例的停止/启动将更改 IP 地址(只需读取 OP 需要 IP 保持不变)。
这适用于 AWS EC2 Ubuntu 18.04。
- 生成新的密钥对(使用putty 密钥生成器或 - 如果赶时间 -在线生成器)。
- 将生成的
ssh-rsa ...
公钥插入到下面的脚本中
- 停止实例
- 将实例用户数据设置为此云初始化脚本
#cloud-config
bootcmd:
- echo 'ssh-rsa AAAAB3Nz...' > /root/.ssh/authorized_keys
- 启动实例
- 测试连接
- 再次停止实例并删除用户数据(您可能会忘记这样做)
注意事项和警告
- AWS 云初始化文档
- 云初始化文档和示例
- 空格在云初始化脚本中似乎很重要,抵制格式化的冲动,例如在哈希后插入一个空格
#cloud-config
- 我摆弄了一下
cloud-init-per once
,但从来没有成功过,只是浪费了很多时间
- 您可以使用
>>
而不是>
附加密钥而不是覆盖authorized_keys
文件。但是如果你在之前的尝试中搞砸了内容,你永远不会知道它为什么不起作用。
- 您可以更改脚本以推送任何用户的密钥,例如默认 EC2
ubuntu
用户:echo 'ssh-rsa ...' > /home/ubuntu/.ssh/authorized_keys
- 请注意已安装的密钥轮换代理,例如JumpCloud,这可能会覆盖
authorized_keys
文件。对于 JumpCloud,您可以更改要写入的脚本echo 'ssh-rsa ...' > /home/ubuntu/.ssh/authorized_keys.jcorig
(JumpCloud 包括该文件的内容)
- 必须将 Ubuntu 配置为允许 SSH 连接(应该是默认设置)
- SSH 端口需要打开(Ubuntu 防火墙)
- 实例的安全组(AWS防火墙)需要允许SSH端口和你的IP
- 整个过程可以自动化(停止、设置用户数据、启动、连接和修复、停止、清除用户数据、启动)。有趣的 AWS 命令是(Java 客户端):
m_ec2.modifyInstanceAttribute(new ModifyInstanceAttributeRequest().withInstanceId("<instance-id>").withUserData(userdataBase64));