Вопрос Как добавить SSH-ключи в файл authorized_keys?


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

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

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


148
2018-06-01 16:02


происхождения


Годы спустя это - по-видимому, актуально и активно; только хотел сделать наблюдение, поговорить о том, что он уклонился от пули: «К счастью, у меня SSH открыт, поэтому я все еще подключен [..]» - sheesh! ; дР - Nostromov
Этот пост, который был отредактирован в мой день рождения, спас меня два месяца назад в день моего рождения. - ytpillai


ответы:


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


171
2018-06-01 16:29



С серверами Amazon EC2 все, что я получаю, это закрытый ключ (key.pem). У меня нет открытого ключа нигде. - Dave Long
@Dave Long: вы должны сгенерировать новый ключ, используя ssh-keygen -t rsa и поместите вновь созданный id_rsa.pub файл в ~/.ssh/authorized_keys на вашем сервере. Смотрите также docs.amazonwebservices.com/AWSEC2/latest/UserGuide/... - Lekensteyn
@DaveLong: вы можете сгенерировать открытый ключ из закрытого ключа в любое время. Вы можете сделать это просто с помощью следующей команды: ssh-keygen -y -f key.pem > key.pub - Morgan Blackthorne
@MorganBlackthorne Хотя это правда, я бы рекомендовал создавать ваши личные ключи, а не принимать их из удаленных источников. Вы не можете быть полностью уверены, что секретный ключ не просочился. - Lekensteyn
@Gerrat Fixed². - Lekensteyn


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


147
2018-02-27 19:31



Ваш ответ помог мне сделать это на нескольких удаленных компьютерах без каких-либо дополнительных пакетов, спасибо. - nol
Это не гарантирует, что каталог «~ / .ssh» и файл «~ / .ssh / authorized_keys» будут созданы с правильными разрешениями. - Nick
@ Ник, у меня была эта проблема. Итак, возможно, сначала нужно сначала проверить их существование, если они отсутствуют правильно создаются с помощью chmod (700 / folder, 600 / file) и только потом добавить? так что, может быть, это не может быть один лайнер? - AnneTheAgile
@AnneTheAgile Я думаю, что mkdir -p ~/.ssh часть ответа @MariusButuc на umask 077 && mkdir -p ~/.ssh это все, что вам нужно сделать, чтобы обеспечить правильную работу. - Nick
ty @Nick! Я отдам его. - AnneTheAgile


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

ssh-copy-id user@host

115
2018-06-01 16:32



Это не похоже на действительную команду на Mac, что и является моей клиентской машиной. - Dave Long
Может быть полезно phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x - Shoaib Nawaz
на OSX вы можете установить с варевом: brew install ssh-copy-id - phil
В Macports эта команда может быть установлена ​​с использованием sudo port install openssh +ssh_copy_id, +ssh_copy_id устанавливает openssh с вариантом ssh_copy_id. - Stefan Lasiewski
Обратите внимание, что инструкции на phildawson.tumblr.com попросят установить ненадежное программное обеспечение, как root. Это довольно опасно и хороший способ взломать, если вы не знаете, что можете доверять автору. - Stefan Lasiewski


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

32
2018-06-01 18:23





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

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

cat ~/.ssh/id_rsa.pub

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

nano ~/.ssh/authorized_keys

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


7
2017-09-07 18:42





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


3
2018-04-23 19:59



Мне просто понравилось бы, если бы в консоли Windows могла быть добавлена ​​вся функция ssh в ее интерпретатор - Dennis


Я думал, что могу внести свой вклад в это, потому что речь идет о экземплярах AWS, и все ответы рассматривают проблему только как проблему Linux, как будто это часть аппаратного обеспечения. Первое, что вам нужно понять, это то, что вы никогда не должны рассматривать экземпляры EC2 как аппаратные средства. Это просто создаст для вас больше работы. Рассматривайте их как неустойчивые. Это самое большое препятствие, которое я вижу у людей с AWS. Сделайте AMI вашего экземпляра и введите необходимый ключ в новый экземпляр. cloud-init позаботится об этом для вас. Более подробно все, что вам нужно сделать, это использовать правильный открытый ключ при создании нового экземпляра из AMI оригинала. Если, как и в комментариях одобренного ответа, вы хотите создать свою собственную пару пабов и файлов 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
2018-03-03 01:22





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





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

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

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

1
2017-08-23 17:32