Не удается создать экземпляр EC2 с парами ключей для доступа по ssh

Я пытаюсь запустить новый экземпляр EC2 с установленным на нем докером на AWS. Позже мне понадобится 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 при создании нового экземпляра через терминал ....

0
задан 3 January 2020 в 12:35
3 ответа

я создал пару ключей, затем я загрузил ее, скопировал ее в мою./ssh/aws папку и работал:

Этот путь означает папку, названную ssh под . (текущий каталог)

не могущий создать пару ключей: откройте ~/.ssh/aws/: никакой такой файл или каталог

Этот путь означает папку, названную .ssh под ~ (Ваш дом)
Попытка, помещая ключи ~/.ssh/aws/, и посмотрите, помогает ли это.

1
ответ дан 3 January 2020 в 15:43

Оставление этого для будущих читателей, которые борются с той же проблемой:

Поэтому то, что AWS на самом деле делает при создании экземпляра с командной строкой, - то, что это создает пару ключей и загружает его на локальную машину.

Для обнаружения, где это расположено, каждый может:

Список все машины докера docker-machine ls Осматривают машину экземпляра EC2 docker-machine inspect machinename

, Это даст Вам sth как:

{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "3.124.195.229",
        "MachineName": "machine-ec2",
        "SSHUser": "xxx",
        "SSHPort": xxx,
        "SSHKeyPath": "pathtokey/id_rsa",
        "StorePath": "/Users/username/.docker/machine",
        ....


}

К ssh в экземпляр EC2 сделайте:

ssh -i "pathtokey/id_rsa" ubuntu@endpointofyourec2instance

И необходимо быть в.

0
ответ дан 3 January 2020 в 15:43

Если пара ключей не существует (требуется в регионе 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"

Однако, возможно, лучше всего разрешить докер-машине управлять ключами 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- коды/docker-machine-ec2/blob/master/ec2_spinup.sh#L87-L94 для примера создания машин с общим префиксом имени машины (при условии, что docker-machine является предпочтительным решением, а не docker swarm, AWS Batch, AWS Labmda, k8s и т. д.).

1
ответ дан 13 May 2021 в 03:43

Теги

Похожие вопросы