我需要新增另一位可以使用 SSH 連接至 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體的使用者。我如何使用 cloud-init 和使用者資料做到這一點?
簡短描述
將使用者資料指令碼傳遞給 cloud-init,該指令碼會執行下列動作:
1. 建立新使用者。
2. 為 SSH 目錄及其中的檔案設定適當的擁有權和檔案許可。
3. 將 SSH 公有金鑰附加至 authorized_keys 檔案中。
解決方法
在開始之前,請注意下列事項:
1. 使用 SSH 連接至您的 EC2 執行個體。
2. 執行下列命令以確認已安裝 cloud-init:
sudo yum list installed cloud-init
如果尚未安裝 cloud-init,請執行下列命令以安裝它:
sudo yum install cloud-init
3. 開啟 Amazon EC2 主控台,然後選取執行個體。
4. 依序選擇動作、執行個體狀態及停止。
注意:如果未提供停止選項,則表示執行個體已停止,或者其根裝置是執行個體儲存體磁碟區。
5. 從金鑰對中擷取公有金鑰。
**注意:**您必須擁有金鑰對或私有金鑰才能擷取公有金鑰。若要建立金鑰對,請參閱使用 Amazon EC2 建立金鑰對。針對 SSH 安全性,最佳實務是透過 EC2 主控台或第三方工具建立金鑰對。
6. 依序選擇動作、執行個體設定及檢視/變更使用者資料。
7. 將下列範例指令碼複製並貼上使用者資料欄位中。在使用者名稱中,輸入新使用者的使用者名稱。對於 ssh-rsa AB3nzExample,輸入您的公有金鑰:
#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
- name: username
groups: [ wheel ]
sudo:
- "ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd"
- "ALL=(ALL) NOPASSWD: /usr/bin/cp /home/username/webserver_configuration.conf /etc/httpd/conf.d/"
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AB3nzExample
此範例指令碼允許新使用者僅執行下列根動作:
- 將 /home/username/webserver_configuration.conf 檔案複製到 /etc/httpd/conf.d/
- 重新啟動 Web 伺服器服務
若要授予使用者對 EC2 的完整存取權,請將 sudo 欄位取代為 sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]。
**注意:**依預設,cloud-init 指令僅在啟動執行個體時執行。不過,當您使用此使用者資料指令碼時,cloud-init 會在每次執行個體重新開機或重新啟動時,將公有金鑰新增至執行個體。如果移除使用者資料指令碼,則會還原預設功能。
8. 選擇儲存。
9. 依序選擇動作、執行個體狀態及開始。
10. 當執行個體達到執行狀態時,請以新使用者身分登入。新使用者的預設行為與 ec2-user 相同。
**注意:**修改執行個體的使用者資料會使用 ModifyInstanceAttribute API 動作。您可以建立 AWS Identity and Access Management (IAM) 原則以限制此動作。
相關資訊
顯示您的金鑰對
如何將具有 SSH 存取的新使用者帳戶新增至我的 Amazon EC2 Linux 執行個體?