如果您长期使用Amazon Web Services(AWS)中的实例,则可能会遇到这个常见问题,这不是技术上的问题。在近期未使用过的区域中启动新实例时,可能最终会创建一个新的SSH密钥对,这导致密钥过多,这可能变得复杂且混乱。本文为您提供了一种在所有区域中拥有公钥的方法。假设您有一个Fedora 30或31桌面系统,其中存储了密钥,并且还安装了Ansible(参考:在Fedora系统中获取最新的Ansible 2.8版本)。借助Ansible的ec2_key模块,您可以创建一个简单的playbook,以在所有区域维护您的SSH密钥对。如果您需要添加或删除键,则就像在文件中添加和删除行一样简单。
设置和运行playbook 要使用该playbook,请首先为ec2_key模块安装必要的依赖项: $ sudo dnf install python3-boto python3-boto3 该playbook很简单:您只需更改密钥及其名称,如下面的示例所示。之后,运行playbook并在列出的所有公共AWS区域上进行迭代。如果您有权访问,该示例还包括限制区域。要包含它们,请根据需要取消注释每一行,保存文件,然后再次运行该playbook。
--- - name: Maintain an ssh key pair in ec2 hosts: localhost connection: local gather_facts: no vars: ansible_python_interpreter: python tasks: - name: Make available your ssh public key in ec2 for new instances ec2_key: name: "YOUR KEY NAME GOES HERE" key_material: 'YOUR KEY GOES HERE' state: present region: "{{ item }}" with_items: - us-east-2 #US East (Ohio) - us-east-1 #US East (N. Virginia) - us-west-1 #US West (N. California) - us-west-2 #US West (Oregon) - ap-east-1 #Asia Pacific (Hong Kong) - ap-south-1 #Asia Pacific (Mumbai) - ap-northeast-2 #Asia Pacific (Seoul) - ap-southeast-1 #Asia Pacific (Singapore) - ap-southeast-2 #Asia Pacific (Sydney) - ap-northeast-1 #Asia Pacific (Tokyo) - ca-central-1 #Canada (Central) - eu-central-1 #EU (Frankfurt) - eu-west-1 #EU (Ireland) - eu-west-2 #EU (London) - eu-west-3 #EU (Paris) - eu-north-1 #EU (Stockholm) - me-south-1 #Middle East (Bahrain) - sa-east-1 #South America (Sao Paulo) # - us-gov-east-1 #AWS GovCloud (US-East) # - us-gov-west-1 #AWS GovCloud (US-West) # - ap-northeast-3 #Asia Pacific (Osaka-Local) # - cn-north-1 #China (Beijing) # - cn-northwest-1 #China (Ningxia) 该playbook 还要求通过API对AWS进行访问。为此,请按以下方式使用环境变量: $ AWS_ACCESS_KEY="aws-access-key-id" AWS_SECRET_KEY="aws-secret-key-id" ansible-playbook ec2-playbook.yml playbook完成后,请确认您的密钥在AWS控制台上可用。要做到这一点,请按以下步骤操作: 1、登录到您的AWS控制台。 2、转到EC2 > Key Pairs。 3、您应该会看到列出的密钥,唯一的限制是您必须使用此方法逐个区域检查。
另一种方法:在shell中使用快速命令为您执行此检查 首先在playbook上创建一个包含所有区域的变量: AWS_REGION="us-east-1 us-west-1 us-west-2 ap-east-1 ap-south-1 ap-northeast-2 ap-southeast-1 ap-southeast-2 ap-northeast-1 ca-central-1 eu-central-1 eu-west-1 eu-west-2 eu-west-3 eu-north-1 me-south-1 sa-east-1" 然后执行for循环,您将从aws API获得结果: for each in ${AWS_REGION} ; do aws ec2 describe-key-pairs --key-name <YOUR KEY GOES HERE> ; done 请记住,要执行上述操作,您需要安装aws cli(参考:在Linux系统上安装和使用AWS CLI的方法)。
相关主题 |