Я пытаюсь запустить новый экземпляр 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 при создании нового экземпляра через терминал ....
я создал пару ключей, затем я загрузил ее, скопировал ее в мою./ssh/aws папку и работал:
Этот путь означает папку, названную ssh
под .
(текущий каталог)
не могущий создать пару ключей: откройте ~/.ssh/aws/: никакой такой файл или каталог
Этот путь означает папку, названную .ssh
под ~
(Ваш дом)
Попытка, помещая ключи ~/.ssh/aws/, и посмотрите, помогает ли это.
Оставление этого для будущих читателей, которые борются с той же проблемой:
Поэтому то, что 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
И необходимо быть в.
Если пара ключей не существует (требуется в регионе 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 и т. д.).