Как добавить SSH Keys в файл author_keys?


185

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

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

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


3
Спустя годы это все еще кажется уместным и активным; хотел только сделать замечание, поговорить о том, чтобы увернуться от пули: «К счастью, у меня открыт SSH, поэтому я все еще на связи […]» - блин! ; dP
Ностромов

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

Ответы:


198

Вы никогда не должны сохранять файл с его содержимым, начинающимся -----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детали.


1
С серверами Amazon EC2 все, что я получаю, это закрытый ключ (key.pem). У меня нигде нет открытого ключа.
Дэйв Лонг,

3
@Dave Long: Вы должны сгенерировать новый ключ, используя ssh-keygen -t rsaи поместить вновь созданный id_rsa.pubфайл ~/.ssh/authorized_keysна ваш сервер. См. Также docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Лекенштейн

15
@DaveLong: Вы можете создать открытый ключ из закрытого ключа в любое время. Вы можете сделать это просто с помощью следующей команды: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne

5
@MorganBlackthorne Хотя это и так, я бы порекомендовал генерировать ваши закрытые ключи, а не принимать их из удаленных источников. Вы не можете быть полностью уверены, что закрытый ключ не пропал.
Лекенштейн

2
@Gerrat Fixed².
Лекенштейн

175

Альтернативный способ установки вашего открытого ключа на удаленном компьютере 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.


10
Ваш ответ помог мне сделать это на нескольких удаленных компьютерах без каких-либо дополнительных пакетов, спасибо.
Нол

Это не гарантирует, что каталог «~ / .ssh» и файл «~ / .ssh / authorized_keys» будут созданы с правильными разрешениями.
Ник

1
@ Ник, у меня была эта проблема. Так что, возможно, нужно действительно сначала проверить их существование, если пропустил, правильно создать с помощью chmod (700 / папка, 600 / файл), и только потом добавить? тогда, может быть, это не один лайнер?
AnneTheAgile

7
@AnneTheAgile Я думаю, что изменение mkdir -p ~/.sshчасти ответа, данного @MariusButuc, umask 077 && mkdir -p ~/.ssh- это все, что вам нужно сделать, чтобы обеспечить его правильную работу.
Ник

1
ты @ Ник! Я попробую.
AnneTheAgile

128

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

ssh-copy-id user@host

1
Это не похоже на действительную команду на Mac, которая является моей клиентской машиной.
Дэйв Лонг,


13
на OSX вы можете установить с brew:brew install ssh-copy-id
Phil

В Macports эта команда может быть установлена ​​с помощью sudo port install openssh +ssh_copy_id. +ssh_copy_idУстанавливает OpenSSH с ssh_copy_id вариантом.
Стефан Ласевский,

6
Обратите внимание, что инструкции на phildawson.tumblr.com просят вас установить ненадежное программное обеспечение от имени пользователя root. Это довольно опасный и хороший способ получить взлом, если только вы не знаете, что можете доверять автору.
Стефан Ласевский,

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

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

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

cat ~/.ssh/id_rsa.pub

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

nano ~/.ssh/authorized_keys

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


5

Я подумал, что могу внести свой вклад в это, поскольку речь идет именно об экземплярах 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


3

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


1
Мне бы очень понравилось, если бы в консоли Windows можно было добавить всю функциональность ssh в свой интерпретатор
Деннис

2

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

1

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

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

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.