У меня есть сервер 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 для получения подробной информации.
Сначала просмотрите/скопируйте содержимое вашего локального открытого ключа id_rsa.pub включая начало "ssh-rsa", пока оно не закончится вашим адресом электронной почты:
cat ~/.ssh/id_rsa.pub
Затем отредактируйте authorized_keys на сервере и вставьте содержимое вашего буфера обмена под любыми другими ключами в этом файле:
nano ~/.ssh/authorized_keys
И спасти Ctl+O, выйдите из файла Ctl+X, выйдите из сеанса SSH exit и попробуйте снова войти в систему, чтобы подтвердить, что это сработало. Если он не запрашивал пароль, это работало.
Получите оболочку на удаленной машине, куда вы хотите поместить ключ, а затем вы можете запустить эту однострочную программу для создания необходимых файлов и каталогов, установки их разрешений и добавления ключа к файлу. Конечно, вы должны изменить KEYGOESHERE часть ниже и комментарий после нее.
Я подумал, что могу внести свой вклад в это, поскольку речь идет конкретно об экземплярах AWS, и все ответы рассматривают проблему только как проблему Linux, как если бы это была часть оборудования. Первое, что вам нужно понять, это то, что вы никогда, никогда не должны рассматривать экземпляры EC2 как аппаратные средства. Это просто создаст больше работы для вас, Относитесь к ним как к изменчивым. Это самое большое препятствие, с которым, как я вижу, сталкиваются люди, работающие с AWS.Создайте AMI вашего экземпляра и введите необходимый вам ключ в новый экземпляр. cloud-init позаботится об этом за вас.Более подробно все, что вам нужно сделать, это использовать правильный открытый ключ при создании нового экземпляра из AMI оригинала.Если, как и в комментариях к утвержденному ответу, вы хотите сгенерировать свою собственную пару ключей из файлов pub и pem, AWS предоставляет вам возможность загрузить ваши открытые ключи для использования в EC2.
После сохранения открытого ключа вы должны сохранить закрытый ключ в каталог и файл на вашем компьютере. И в разделе авторизации ssh на putty вы должны указать на файл закрытого ключа, который вы сохранили на своем рабочем столе. Это сработает. У меня это работает.
Вот вариант, при котором у вас может быть список имен файлов с открытым ключом в текстовом файле, а большой пакет файлов с открытым ключом также находится в том же каталоге.
Этот вариант может быть полезен, если вы предоставляете огромный список файлов с открытым ключом для импорта :-)
$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
Годы спустя это - все еще - кажется актуальным и активным; только хотел сделать замечание, поговорить о том, что избежал пули: “К счастью, у меня открыт SSH, так что я все еще подключен […]” - шиш! ; DP