Ssh

無法使用密鑰對創建 EC2 實例以進行 ssh 訪問

  • May 27, 2021

我正在嘗試在 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 等相比)。

引用自:https://serverfault.com/questions/997474