我在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
方法
答案 0 :(得分:1)
对于AWS EC2 Linux实例,密钥对中的SSH公共密钥存储在〜/ .ssh / authorized_keys中。如果您用其他方法覆盖它,请确保您了解其中的含义。
正确的过程是将密钥对中的公钥添加到authorized_keys并设置正确的文件权限。
如果要在authorized_keys中设置一组密钥对,则也可以。确保使用公钥正确格式化文件并正确设置文件许可权。
文件权限应为644,以便SSH服务器可以读取它们。
另一个可能的问题是,当您更改authorized_keys时,还需要重新启动SSH服务器,但是我确实看到您正在重新启动服务器,从而消除了该问题。
Ubuntu示例:
sudo service ssh restart