在 AWS 中使用 Ansible 來管理你的 SSH 密鑰
如果你長期使用亞馬遜 Web 服務(AWS)中的實例,你可能會遇到下面這個常見的問題,它不是因為技術性的原因導致的,更多的是因為人類追求方便舒適的天性:當你登錄一台你最近沒有使用的區域的新實例,你最終會創建一個新的 SSH 密鑰對,久而久之這最終就會造成個人擁有太多密鑰,導致管理起來複雜混亂。
本文將會介紹一種在所有區域中使用你的公鑰的方法。最近,一篇 Fedora Magazine 的文章介紹了另一種解決方案。但本文中的解決方案可以進一步的以更簡潔和可擴展的方式實現自動化。
假設你有一個 Fedora 30 或 31 系統,其中存儲了你的密鑰,並且還安裝了 Ansible。當這兩件事同時滿足時,就提供了解決這個問題的辦法,甚至它還能做到更多。
使用 Ansible 的 ec2_key 模塊,你可以創建一個簡單的 Ansible 劇本來在所有區域中維護你的 SSH 密鑰對。如果你需要增加或者刪除密鑰,在 Ansible 中這就像從文件中添加和刪除行一樣簡單。
設置和運行 Ansible 劇本
如果要使用劇本,首先需要安裝 ec2_key
模塊的必要依賴項:
$ sudo dnf install python3-boto python3-boto3
該劇本很簡單:你只需要像下面的例子一樣,修改其中的密鑰及其對應的名稱。然後,運行該劇本,它會幫你遍歷所有列出的公共 AWS 區域。該示例還包括一些你可能要訪問的受限區域,只需根據需要來取消對應行的注釋,然後,保存文件重新運行劇本即可。
- 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)
這個劇本需要通過 API 訪問 AWS,為此,請使用環境變數,如下所示:
$ AWS_ACCESS_KEY="aws-access-key-id" AWS_SECRET_KEY="aws-secret-key-id" ansible-playbook ec2-playbook.yml
另一個方式是安裝 aws 命令行工具並添加憑據,如以前的一篇 Fedora Magazine 文章所述。如果你在線存儲它們,這些參數將不建議插入到劇本中!你可以在 GitHub 中找到本文的劇本代碼。
完成該劇本之後,請確認你的密鑰在 AWS 控制台上可用。為此,可以做如下操作:
- 登錄你的 AWS 控制台
- 轉到 「EC2 > Key Pairs」
- 你應該會看到列出的密鑰。唯一的限制是你必須使用此方法逐個區域來檢查。
另一種方法是在 shell 中使用一個快速命令來為你做這些檢查。
首先在劇本上創建一個包含所有區域的變數:
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"
然後,執行如下循環,你就可以從 aws 的 API 獲得結果:
for each in ${AWS_REGION} ; do aws ec2 describe-key-pairs --key-name <YOUR KEY GOES HERE> ; done
請記住,要執行上述操作,你需要安裝 aws 命令行。
via: https://fedoramagazine.org/using-ansible-to-organize-your-ssh-keys-in-aws/
作者:Daniel Leite de Abreu 選題:lujun9972 譯者:hj24 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive