Как мне добавить SSH-ключи в файл authorized_keys?

У меня есть сервер Ubuntu на Amazon EC2, который я использую для разработки, и сегодня я тупо очистил все из своего ~/.ssh/authorized_keys файл. К счастью, у меня открыт SSH, так что я все еще подключен и могу исправить файл, но когда я пытаюсь вернуть свой ключевой файл обратно, он не работает. Я все еще получаю отказ в разрешении от сервера на моем локальном компьютере.

authorized_keys имеет права доступа 600. Я попытался добавить свой SSH-ключ с помощью ssh-rsa и оставить ssh-rsa выключенным. Я также попытался сделать SSH-ключ всего одной строкой, но это тоже не сработало.

Есть ли что-то еще, что я должен сделать, например, перезагрузить файл каким-то образом?

Вы должны никогда сохраните файл с его содержимым, начинающимся с -----BEGIN RSA PRIVATE KEY----- на сервере, который является вашим частный ключ. Вместо этого вы должны поместить общественный ключ в ~/.ssh/authorized_keys файл.

Этот общественный ключ имеет .pub расширение при создании с использованием ssh-keygen и его содержание начинается с ssh-rsa AAAAB3. (Двоичный формат описан в ответах на этот вопрос).

Разрешения на ~/.ssh на сервере должно быть 700. Файл ~/.ssh/authorized_keys (на сервере) предполагается иметь режим 600. Разрешения (закрытого) ключа на стороне клиента должны быть равны 600.

Если закрытый ключ не был защищен паролем, и вы разместили его на сервере, я рекомендую вам сгенерировать новый:

ssh-keygen -t rsa

Вы можете пропустить это, если вы полностью уверены, что никто не сможет восстановить удаленный закрытый ключ с сервера.

Если это не поможет, запустите ssh с опциями для большей детализации:

ssh -vvv user@example.com

На стороне сервера вы можете просмотреть /var/log/auth.log для получения подробной информации.

Альтернативный способ установки вашего открытого ключа на удаленном компьютере authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Некоторые преимущества:

  • не требует ssh-copy-id подлежащий установке.

  • гарантирует, что mkdir работает перед попыткой добавления id_rsa.pub к authorized_keys.

Если у вас есть аутентификация на основе входа в систему, используйте ssh-copy-id чтобы добавить ваши открытые ключи к удаленному серверу.

ssh-copy-id user@host
local> scp .ssh/id_rsa.pub remote.com:
local> ssh remote.com
remote> cat id_rsa.pub >> .ssh/authorized_keys
remote> rm id_rsa.pub
remote> exit

Самый простой способ - скопировать и вставить...

Сначала просмотрите/скопируйте содержимое вашего локального открытого ключа id_rsa.pub включая начало "ssh-rsa", пока оно не закончится вашим адресом электронной почты:

cat ~/.ssh/id_rsa.pub

Затем отредактируйте authorized_keys на сервере и вставьте содержимое вашего буфера обмена под любыми другими ключами в этом файле:

nano ~/.ssh/authorized_keys

И спасти Ctl+O, выйдите из файла Ctl+X, выйдите из сеанса SSH exit и попробуйте снова войти в систему, чтобы подтвердить, что это сработало. Если он не запрашивал пароль, это работало.

Получите оболочку на удаленной машине, куда вы хотите поместить ключ, а затем вы можете запустить эту однострочную программу для создания необходимых файлов и каталогов, установки их разрешений и добавления ключа к файлу. Конечно, вы должны изменить KEYGOESHERE часть ниже и комментарий после нее.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

Я подумал, что могу внести свой вклад в это, поскольку речь идет конкретно об экземплярах AWS, и все ответы рассматривают проблему только как проблему Linux, как если бы это была часть оборудования. Первое, что вам нужно понять, это то, что вы никогда, никогда не должны рассматривать экземпляры EC2 как аппаратные средства. Это просто создаст больше работы для вас, Относитесь к ним как к изменчивым. Это самое большое препятствие, с которым, как я вижу, сталкиваются люди, работающие с AWS.Создайте AMI вашего экземпляра и введите необходимый вам ключ в новый экземпляр. cloud-init позаботится об этом за вас.Более подробно все, что вам нужно сделать, это использовать правильный открытый ключ при создании нового экземпляра из AMI оригинала.Если, как и в комментариях к утвержденному ответу, вы хотите сгенерировать свою собственную пару ключей из файлов pub и pem, AWS предоставляет вам возможность загрузить ваши открытые ключи для использования в EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

После сохранения открытого ключа вы должны сохранить закрытый ключ в каталог и файл на вашем компьютере. И в разделе авторизации ssh на putty вы должны указать на файл закрытого ключа, который вы сохранили на своем рабочем столе. Это сработает. У меня это работает.

Вот вариант, при котором у вас может быть список имен файлов с открытым ключом в текстовом файле, а большой пакет файлов с открытым ключом также находится в том же каталоге.

Этот вариант может быть полезен, если вы предоставляете огромный список файлов с открытым ключом для импорта :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done

Годы спустя это - все еще - кажется актуальным и активным; только хотел сделать замечание, поговорить о том, что избежал пули: “К счастью, у меня открыт SSH, так что я все еще подключен […]” - шиш! ; DP

Этот пост, который был отредактирован в мой день рождения, спас меня два месяца назад в мой день рождения.