cloud-init脚本无法运行?

40次阅读
没有评论

问题描述

在使用Terraform和cloud-init启动EC2实例时,遇到了cloud-init脚本无法运行的问题。他正在按照Terraform教程中的步骤进行操作,但在尝试使用OpenSSH私钥从CLI登录实例时,出现了”Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”的错误。用户怀疑这可能是由于公钥未上传到实例导致的。他还尝试将AMI更改为Linux 2,但仍然遇到相同的错误。用户想知道是否有什么明显的问题。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

问题分析

根据用户提供的信息,我们可以看到cloud-init脚本存在一些问题:
#groups被注释掉了,导致下面的列表使其成为无效的YAML。
– 即使我们取消注释groups,- ubuntu: [root,sys]也是无效的,因为默认用户已经有了一个组规范。
– 在runcmd中,sudo su在脚本中不起作用。相反,你应该使用sudo -u <user>来为单个用户运行单个命令。此外,不需要使用sudo获取root权限,因为所有用户脚本都已经以root身份运行。

解决方案

修复上述问题后,我们将得到一个修复后的cloud-init脚本,如下所示:

#cloud-config
# Add the empty group hashicorp.
groups:
  - hashicorp

# Add users to the system. Users are added after groups are added.
users:
  - default
  - name: terraform
    gecos: terraform
    shell: /bin/bash
    primary_group: hashicorp
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    lock_passwd: false
    ssh_authorized_keys:
      - ssh rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCMT6uYfhWx8jOmiGR9ryIPKcWy2ceqvyZ4Q4+q5QTiZtlbWxbP37YZnT8uQhyjB4QRR1cjOyvGKC3Zu0Isy0eHIx2lGm/7B04bsoWWAUqhJmYWMZlivnHtJJJ4P5gnvXiRNmFg9iK07C7ClggNBAQZZHUeA5wcnvvHT/pDkGUjMUqgLvmWRJqJM9qLT717e229F1Fyh+sYtAj08qmcFF1JCs2D33R46RQ8YBMpQqmWLfjuJDUrjdvMu7Mv3aPpaeUWuYoC90iHR9XMeNonrtRlx21nY3CoMZ0AOpeNl999UzyMJrsvN4qm6byK2Pc6jrEyKr9jI8SvMEGdSWgqr/Hd

# Downloads the golang package
packages:
  - golang-go

# Sets the GOPATH & downloads the demo payload
runcmd:
  - mkdir /home/terraform/go
  - chown terraform:hashicorp /home/terraform/go
  - GOPATH=/home/terraform/go -u terraform go install github.com/hashicorp/learn-go-webapp-demo@latest

请注意,你需要将公钥的格式更改为单行,以确保它是有效的YAML。

其他建议

  • 确保你使用正确的私钥,以PEM格式提供。
  • 尝试在渲染之前在terraform的file函数周围添加”${}”,如下所示:
data "template_file" "init_script" {
  template = "${file("../scripts/add-ssh-web-app.yaml")}"
}

希望这些解决方案能帮助到你解决问题。如果你有任何其他问题,请随时提问。

正文完