Як додати SSH-ключі до файлу санкціонованих_кілей?


185

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

authorized_keysмає дозволи 600. Я спробував додати мій ключ SSH за допомогою ssh-rsa і залишити ssh-rsa вимкнено. Я також спробував зробити ключ SSH всі однією лінією, але і це не спрацювало.

Чи є ще щось, що я повинен зробити, як перезавантажити файл, як?


3
Через роки це - все-таки видається актуальним та активним; хотів лише зробити спостереження, поговорити про те, що ухилився від кулі: "На щастя, у мене відкритий SSH, тому я все ще підключений [..]" - sheesh! ; 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/…
Lekensteyn

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
Ваша відповідь допомогла мені зробити це на кількох віддалених машинах без додаткових пакетів, дякую.
nol

Це не гарантує, що каталог "~ / .ssh" та файл "~ / .ssh / pooblasti_keys" будуть створені з правильними дозволами.
Нік

1
@Nick, у мене була така проблема. Тож, можливо, треба справді спочатку перевірити їх існування, якщо вони відсутні, створити належним чином з chmod (700 / папка, 600 / файл), і лише потім додати? тож, може, це не може бути один лайнер?
AnneTheAgile

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

1
ty @Nick! Я дам йому піти.
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_idopenssh з варіантом 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 оригіналу. Якщо, як і в коментарях до затвердженої відповіді, ви хочете генерувати власну пару ключових файлів паб і пем, 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

Після збереження відкритого ключа вам слід зберегти приватний ключ у каталог та файл на комп'ютері. І в розділі auth ssh on 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.