要保持由ASG(Auto Scaling Group)管理的EC2实例的SSH指纹,可以使用以下方法:
首先,将SSH指纹存储在Parameter Store中:
aws ssm put-parameter --name "MyEC2InstanceSSHKey" --value "SSH_FINGERPRINT" --type "SecureString"
其中,"MyEC2InstanceSSHKey"是Parameter Store中存储SSH指纹的键,"SSH_FINGERPRINT"是实际的SSH指纹。
然后,在启动实例的用户数据脚本中,将SSH指纹检索出来,并将其写入~/.ssh/known_hosts文件中:
#!/bin/bash
# Retrieve SSH fingerprint from Parameter Store
ssh_fingerprint=$(aws ssm get-parameter --name "MyEC2InstanceSSHKey" --query "Parameter.Value" --output text)
# Add SSH fingerprint to known_hosts file
echo "$ssh_fingerprint" >> ~/.ssh/known_hosts
# Continue with other user data scripts or commands
这样,在实例启动时,会从Parameter Store中检索SSH指纹,并将其添加到~/.ssh/known_hosts文件中。这样,下次连接实例时,SSH会验证指纹,并确保连接的安全性。
创建一个Lambda函数,该函数会在Auto Scaling Group中的EC2实例状态更改时触发。函数的代码示例如下:
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
ssm = boto3.client('ssm')
instance_id = event['detail']['EC2InstanceId']
# Describe EC2 instance to get public IP address
response = ec2.describe_instances(InstanceIds=[instance_id])
public_ip = response['Reservations'][0]['Instances'][0]['PublicIpAddress']
# Get SSH fingerprint
ssh_fingerprint = get_ssh_fingerprint(public_ip)
# Store SSH fingerprint in Parameter Store
ssm.put_parameter(Name='MyEC2InstanceSSHKey', Value=ssh_fingerprint, Type='SecureString')
def get_ssh_fingerprint(public_ip):
# Connect to the EC2 instance and retrieve SSH fingerprint
# You can use SSH library such as paramiko to connect and retrieve SSH fingerprint
# Example code using paramiko
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(public_ip, username='ec2-user', key_filename='path/to/ssh/private/key.pem')
ssh_fingerprint = ssh_client.get_transport().get_remote_server_key().get_fingerprint()
ssh_client.close()
return ssh_fingerprint
此Lambda函数会在Auto Scaling Group中的EC2实例状态更改时触发。它会获取实例的公共IP地址,连接到该实例并检索SSH指纹,然后将其存储在Parameter Store中。
然后,创建一个CloudWatch事件规则,该规则将触发Lambda函数,以便在实例状态更改时自动更新SSH指纹。
通过以上方法,可以确保由ASG管理的EC2实例的SSH指纹得到维护和更新。
下一篇:保持有序关系的情况下获取项目