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

Amazon ec2 使用cloud init将_文件写入~/.ssh/将ssh中断到EC2实例(可能是任何机器),amazon-ec2,ssh,cloud-init,Amazon Ec2,Ssh,Cloud Init,我在YAML中使用一个Cloudformation模板和一个嵌入式cloud init UserData来设置主机名和安装软件包等等,我发现,一旦我加入write_files指令,它将破坏EC2实例上的默认SSH密钥,即它似乎干扰AWS用于管理授权_文件的任何过程,在EC2日志中,我可以看到随机密钥的指纹正在生成,而不是预期的密钥对 #cloud-config hostname: ${InstanceHostname} fqdn: ${InstanceHost

我在YAML中使用一个Cloudformation模板和一个嵌入式cloud init UserData来设置主机名和安装软件包等等,我发现,一旦我加入
write_files
指令,它将破坏EC2实例上的默认SSH密钥,即它似乎干扰AWS用于管理
授权_文件的任何过程,在EC2日志中,我可以看到随机密钥的指纹正在生成,而不是预期的密钥对

      #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块可以很好地工作,保留它,由于SSH密钥不匹配,我无法使用SSH连接到主机

那么,是因为写入文件到
~/.ssh
,还是
~/.ssh/authorized\u keys
被删除了?或者目录上的权限已更改


使用
runcmd
附加到
~/.ssh/authorized_-keys
可以很好地工作,但是我想对更大的文件使用适当的
write_-files
方法对于AWS EC2 Linux实例,密钥对中的ssh公钥存储在~/.ssh/authorized_-keys中。如果您用其他内容覆盖它,请确保您理解其含义

正确的步骤是将密钥对中的公钥附加到授权密钥,并设置正确的文件权限

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

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

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

Ubuntu示例:

sudo service ssh restart

通过runcmd管道和用于添加密钥的本机云配置功能,修改
授权的\u密钥
工作正常,只需使用write\u文件将文件写入
~/.ssh/
即可破坏ssh配置。我想这可能是因为订购,根据cloud init docs write_files早期的情况,也许AWS的授权_密钥管理代码会检查在此之后是否存在
~/.ssh
,并假设已配置ssh,因此没有向授权_密钥添加密钥。我在这里也有同样的问题,我无法创建新用户