【发布时间】:2018-05-01 05:44:30
【问题描述】:
我正在使用 cloudformation 启动一个 EC2 实例。我想为该实例使用密码而不是 pem 密钥启用 SSH。我可以编写启动脚本(用户数据)来执行此操作,但我为用户“学生”设置了静态密码“pass123”。我想让这个动态(随机)。 除了 SSH 客户端证书身份验证之外,我们真的会对任何事情感到满意。
这是我的 cloudformation 模板:
{
"AWSTemplateFormatVersion":"2010-09-09",
"Description":"Password for instance",
"Parameters":{
"KeyName":{
"Description":"Name of an existing EC2 KeyPair",
"Type":"String"
},
"AWSAmiId":{
"Description":"AMI Id to find",
"Type":"String",
"Default":"x86_64,amzn-ami-pv-2014.09.1.x86_64-ebs,amazon,ebs,paravirtual"
}
},
"Resources":{
"Ec2Instance":{
"Type":"AWS::EC2::Instance",
"DependsOn":"Ec2SecurityGroup",
"Properties":{
"ImageId":{
"Ref":"AWSAmiId"
},
"InstanceType":"t1.micro",
"Tags":[
{
"Key":"Name",
"Value":"MYINSTANCE"
}
],
"DisableApiTermination":"true",
"SecurityGroupIds":[
{
"Ref":"Ec2SecurityGroup"
}
],
"KeyName":{
"Ref":"KeyName"
},
"UserData":{
"Fn::Base64":{
"Fn::Join":[
"\n",
[
"#!",
"useradd student\n",
"echo pass123 | passwd student --stdin\n",
"echo \"student ALL=(ALL) NOPASSWD: ALL\" | tee -a /etc/sudoers\n",
"mkdir /home/student/.ssh\n",
"cp cp ~ec2-user/.ssh/authorized_keys ~student/.ssh/authorized_keys\n",
"sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config\n",
"service sshd reload\n"
]
]
}
}
}
},
"Ec2SecurityGroup":{
"Type":"AWS::EC2::SecurityGroup",
"Properties":{
"GroupDescription":"VPC Security Group",
"SecurityGroupIngress":[
{
"CidrIp":"0.0.0.0/0",
"FromPort":"22",
"IpProtocol":"tcp",
"ToPort":"22"
}
]
}
}
},
"Outputs":{
"Password":{
"Description":"newly created EC2 instance",
"Value":"pass123"
}
}
}
密码可以是:
SSH 密钥的文件名
AMZN 账户 ID(例如:45678923)
随机字符串 (poiblkjfda)
【问题讨论】:
-
问题出在哪里?
-
我想为这个密码分配任何随机字符串,而不是硬编码'pass123'
-
只需在控制台的用户数据中使用不同的密码。或者,如果您从脚本触发启动,请让脚本选择密码。您的问题是如何生成随机字符串,或者如何将其包含在用户数据中?
-
@JohnRotenstein,我在找 1.如何生成随机字符串? 2、如何在栈输出中显示(包括在云形成的输出部分)?
标签: amazon-web-services amazon-ec2 ssh amazon-cloudformation ec2-ami