無法使用密鑰對創建 EC2 實例以進行 ssh 訪問
我正在嘗試在 AWS 上啟動一個安裝了 docker 的新 EC2 實例。稍後我需要 ssh 進入這個實例。我可以毫無問題地創建它:
docker-machine create --driver amazonec2 --amazonec2-region=eu-central-1 machine-ec2
這將創建一台新機器和一個密鑰對。問題是它沒有下載我以後需要的 .pem 文件來 ssh 進入它。
因此,我嘗試使用現有的密鑰對創建一台新機器。我創建了一個密鑰對,然後下載它,將它複製到我的 ./ssh/aws 文件夾並執行:
docker-machine create --driver amazonec2 --amazonec2-keypair-name=machine-aws-keypair --amazonec2-ssh-keypath=~/.ssh/aws/ --amazonec2-region=eu-central-1 machine-ec2
這給了我錯誤:
Error creating machine: Error in driver during machine creation: unable to create key pair: open ~/.ssh/aws/: no such file or directory equally: docker-machine create --driver amazonec2 --amazonec2-keypair-name=machine-aws-keypair --amazonec2-ssh-keypath=~/.ssh/aws/nameofmykeyfile.pem --amazonec2-region=eu-central-1 machine-ec2
是我做錯了還是這是AWS的問題?我認為前者……關於如何解決這個問題的任何想法?非常感謝您的幫助。提前致謝!
編輯:通過終端創建新實例時,知道如何獲取我的 privatekey.pem 就足夠了……
我創建了一個密鑰對,然後下載它,將它複製到我的 ./ssh/aws 文件夾並執行:
此路徑表示在(目前目錄)
ssh
下呼叫的文件夾.
無法創建密鑰對:打開 ~/.ssh/aws/:沒有這樣的文件或目錄
此路徑表示在(您的家)
.ssh
下呼叫的文件夾 嘗試將密鑰放入 ~/.ssh/aws/ 看看是否有幫助。~
如果密鑰對不存在(在所需的 AWS 區域中),則可以使用 aws-cli 創建它
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-key-pair.html
例如,這假設您的 AWS 憑證已啟用並且您的 IAM 權限允許創建密鑰對:
KEY_NAME=your-unique-name export AWS_DEFAULT_REGION=us-west-2 export AWS_KEYPAIR_NAME="${KEY_NAME}-${AWS_DEFAULT_REGION}" export AWS_SSH_KEYPATH="${HOME}/.aws" aws ec2 create-key-pair \ --key-name "${AWS_KEYPAIR_NAME}" \ --query "KeyMaterial" \ --output text > \ "${AWS_SSH_KEYPATH}"/"${AWS_KEYPAIR_NAME}.pem" chmod 400 "${AWS_SSH_KEYPATH}"/"${AWS_KEYPAIR_NAME}.pem" ssh-keygen -y -f \ "${AWS_SSH_KEYPATH}"/"${AWS_KEYPAIR_NAME}.pem" > \ "${AWS_SSH_KEYPATH}"/"${AWS_KEYPAIR_NAME}.pub"
但是,也許最好的做法是讓 docker-machine 管理 ssh 密鑰,而不是嘗試指示它使用特定密鑰。這以更安全的方式隔離了對每台機器的訪問,並減輕了使用者管理 ssh 密鑰的負擔。
通用 ssh 密鑰的一個優點是能夠使用並行 ssh。一個簡單的替代品是 bash 循環。(例如,我不知道 capistrano 的解決方案。)例如,假設幾台機器有一個共同的機器名稱前綴和一個數字後綴:
machine_prefix="my-machines" for n in $(seq 1 6); do docker-machine ssh "${machine_prefix}-00$n" 'echo $(hostname)' done
有關使用通用機器名稱前綴創建機器的範例,請參見https://github.com/dazza-codes/docker-machine-ec2/blob/master/ec2_spinup.sh#L87-L94 (假設 docker-machine 是解決方案選擇,與 docker swarm、AWS Batch、AWS Labmda、k8s 等相比)。