我一直在研究和测试使用 terraform、aws secretsmanager 和基本 ec2 实例部署东西。
我让它工作了。好了,实例启动了,密钥被创建了,并且使用该密钥的远程执行工作正常!
但是,如果我输出它,密钥看起来是这样的:
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIJffzvvCaUzFEVKYapZh4jjUfF1O3hnjrT6jVT/M9VsX
-----END PRIVATE KEY-----
ssh 拒绝使用它。我也无法使用 ssh-keygen 将其转换为其他任何内容。
但是,它似乎可以与我的 remote-exec 配合使用:
resource "tls_private_key" "pk" {
algorithm = "ED25519"
}
resource "aws_key_pair" "pgx" {
key_name = "pgx"
public_key = tls_private_key.pk.public_key_openssh
provisioner "local-exec" {
command = "echo '${tls_private_key.pk.private_key_pem}' > /home/terraform/.ssh/pgx-private-key.pem"
}
}
resource "aws_instance" "pgx_dev" {
ami = "ami-1234"
instance_type = "t2.micro"
key_name = aws_key_pair.pgx.key_name
security_groups = [ "pgx-internal" ]
provisioner "remote-exec" {
connection {
type = "ssh"
user = "ubuntu"
private_key = tls_private_key.pk.private_key_pem
host = "${self.private_ip}"
}
inline = [
"ls -la"
]
}
}
结果:
aws_instance.pgx_dev (remote-exec): 已连接!aws_instance.pgx_dev (remote-exec): 总计 28...
如果我直接查看 secretsmanager 中的密钥,我会看到同样的东西。local-exec 生成的文件也是一样。
但是 ssh 清楚地说:“加载密钥“pgx-private-key.pem”:格式无效”
我在这里遗漏了什么?
答案1
解决方案是在 terraform 中使用 private_key_openssh 而不是 private_key_pem。这会生成可用于 ssh 的密钥。