如何通过云初始化脚本自动配置甲骨文云 SSH 密钥?

文章导读
在甲骨文云创建实例时,通过控制台的高级选项填入 cloud-init 用户数据脚本,是自动配置 SSH 密钥最稳妥的方式,适用于新购实例或需要批量标准化密钥的场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
A A

在甲骨文云创建实例时,通过控制台的高级选项填入 cloud-init 用户数据脚本,是自动配置 SSH 密钥最稳妥的方式,适用于新购实例或需要批量标准化密钥的场景。

先说结论:云初始化脚本仅在实例首次启动时执行,适合在新建实例阶段写入公钥,已有实例请勿依赖此方法修改密钥。

  • 适合:新购实例、批量创建、需要统一密钥管理的场景
  • 先准备:本地生成 SSH 密钥对,准备好公钥内容
  • 验收:实例启动后能否免密登录,检查云初始化日志

命令速用版

#cloud-config
ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... your_public_key_here

将上述内容保存为文本,在创建实例的“高级选项”中粘贴到“云初始化”框内,确保格式为 YAML。

为什么会这样

甲骨文云实例底层依赖 cloud-init 工具进行初始化配置。当你创建实例时,控制台会将你填入的“用户数据”传递给实例内部的 cloud-init 服务。该服务在系统首次启动阶段读取数据,并根据指令修改系统配置,包括写入 SSH 公钥到默认用户的 authorized_keys 文件中。这是一种标准的云主机引导机制,但它的触发条件严格限定在首次启动周期内。

分步处理

1. 生成密钥对:在本地终端运行 ssh-keygen -t rsa -b 4096,按提示生成密钥,默认路径通常在 ~/.ssh/id_rsa.pub。

如何通过云初始化脚本自动配置甲骨文云 SSH 密钥?

2. 获取公钥内容:使用 cat ~/.ssh/id_rsa.pub 查看公钥,复制完整内容,确保开头是 ssh-rsa 或 ssh-ed25519。

3. 编写云初始化脚本:按照“命令速用版”中的 YAML 格式,将公钥填入 ssh_authorized_keys 列表下,注意缩进必须严格对齐。

4. 创建实例时填入:在甲骨文云控制台创建实例页面,展开“高级选项”,找到“云初始化”输入框,粘贴脚本内容。

5. 启动实例:完成创建并启动实例,等待状态变为“运行中”。

如何通过云初始化脚本自动配置甲骨文云 SSH 密钥?

怎么验证是否生效

1. 尝试 SSH 登录:使用本地私钥 ssh -i ~/.ssh/id_rsa opc@实例公网 IP,若能直接登录且无需密码,说明密钥已写入。

2. 检查日志:登录实例后,查看 /var/log/cloud-init-output.log 文件,搜索 authorized_keys 相关字样,确认无报错信息。

3. 验证文件权限:执行 ls -l ~/.ssh/authorized_keys,确认文件归属为当前用户,权限应为 600 或 644。

如何通过云初始化脚本自动配置甲骨文云 SSH 密钥?

常见坑

1. 仅限首次启动:云初始化脚本通常只在实例第一次启动时运行。如果实例已经创建完成,再修改控制台里的用户数据不会自动生效,除非你手动触发 cloud-init 或重新初始化实例。

2. 格式错误导致失效:YAML 格式对缩进非常敏感,公钥前必须有两个空格缩进,且公钥内容不能换行,否则会导致解析失败,密钥无法写入。

3. 默认用户差异:甲骨文云不同镜像的默认用户不同,Ubuntu 通常是 ubuntu,Oracle Linux 通常是 opc。脚本会将密钥写入当前默认用户目录,请确认你登录时使用的用户名匹配。

4. 覆盖风险:如果同时在控制台上传了 SSH 密钥又写了云初始化脚本,两者通常会合并,但为了避免冲突,建议只选用一种方式管理密钥。