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

时间:2018-07-27 10:19:36

标签: amazon-ec2 ssh cloud-init

我在YAML中使用Cloudformation模板和嵌入式cloud-init UserData来设置主机名和安装软件包等,我发现一旦包含write_files指令,它将破坏默认值EC2实例上的SSH密钥,即似乎干扰了AWS用于管理authorized_files的任何过程,在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_keys被删除了?还是目录的权限已更改?

使用~/.ssh/authorized_keys附加到runcmd可以正常工作,但是我想对较大的文件使用正确的write_files方法

1 个答案:

答案 0 :(得分:1)

对于AWS EC2 Linux实例,密钥对中的SSH公共密钥存储在〜/ .ssh / authorized_keys中。如果您用其他方法覆盖它,请确保您了解其中的含义。

正确的过程是将密钥对中的公钥添加到authorized_keys并设置正确的文件权限。

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

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

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

Ubuntu示例:

sudo service ssh restart