amazon-ec2 - 使用 cloud-init 将文件写入 ~/.ssh/会中断 SSH 到 EC2 实例(可能是任何机器)

标签 amazon-ec2 ssh cloud-init

我在 YAML 中使用 Cloudformation 模板和嵌入式 cloud-init UserData 来设置主机名和安装包等,我发现一旦我包含 write_files指令它将破坏 EC2 实例上的默认 SSH key ,即它似乎会干扰 AWS 用来管理 authorized_files 的任何进程,在 EC2 日志中,我可以看到正在生成随 secret 钥的指纹,而不是预期的 key 对。

      #cloud-config
      hostname: ${InstanceHostname}
      fqdn: ${InstanceHostname}.${PublicDomainName}
      manage_etc_hosts: true
      package_update: true
      package_upgrade: true
      packages:
        - build-essential
        - git
      write_files:
      - path: /home/ubuntu/.ssh/config
        permissions: '0600'
        owner: "ubuntu:ubuntu"
        content: |
          Host github.com
              IdentityFile ~/.ssh/git
          Host *.int.${PublicDomainName}
              IdentityFile ~/.ssh/default
              User ubuntu
      power_state:
        timeout: 120
        message: Rebooting to ensure hostname has stuck correctly
        mode: reboot

删除 write_files block 可以正常工作,将其保留,由于 ssh key 不匹配,我无法通过 SSH 连接到主机。

那么是否应该将文件写入~/.ssh? ,也许 ~/.ssh/authorized_keys被删除?或者目录的权限可能被更改?

附加到 ~/.ssh/authorized_keysruncmd工作正常,但我想使用正确的 write_files大文件的方法

最佳答案

对于 AWS EC2 Linux 实例,您的 key 对中的 SSH 公有 key 存储在 ~/.ssh/authorized_keys 中。如果您用其他内容覆盖它,请确保您了解其含义。

正确的程序是将 key 对中的公钥附加到 authorized_keys 并设置正确的文件权限。

如果您在authorized_keys 中设置一组 key 对,这也可以。确保您使用公钥正确格式化文件并正确设置文件权限。

文件权限应为 644,以便 SSH 服务器可以读取它们。

另一个可能的问题是,当您更改 authorized_keys 时,您还需要重新启动 SSH 服务器,但我确实看到您正在重新启动服务器,从而消除了该问题。

Ubuntu 示例:

sudo service ssh restart

关于amazon-ec2 - 使用 cloud-init 将文件写入 ~/.ssh/会中断 SSH 到 EC2 实例(可能是任何机器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555894/

相关文章:

Mysql 和高 CPU IO 等待

php - Laravel artisan cron 任务无法在 ubuntu 上运行

amazon-web-services - AWS 云信息 : Network Share Drive is inaccessible in cfn-init or UserData

在 Windows 上使用 PuTTY 的 git push 失败(致命的 : The remote end hung up unexpectedly)

user-data - cloud-init:cloud-config指令的执行顺序是什么?

mysql - 亚马逊网络服务 - 基本工作流程

linux - 使用 start-stop-daemon 时,autossh pid 不等于 pidfile 中的 pid

linux - 如何克隆位于连接到互联网的 Mac 上的 git 存储库?

docker - 使用 Terraform 和 Cloud-init 安全地设置 Ubuntu vm