Такс, по гиту немного прошлись (но еще вернемся), теперь по ssh ключам. Для многих как оказалось тоже большая проблема. Но это база, поэтому нужно с этим научиться жить. Принять и простить.

Задача — хочу с локальной машины подключиться к серверу по ssh используя ключ.

Смысл тут такой: у тебя есть 2 ключа, один приватный, второй публичный.

Приватный ключ ты хранишь как свою жопу и задом к лесу не поворачиваешься.

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

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

А если всё хуева… то отправляемся дебажить, как эффективно дебажить расскажу попозже.

Давай тыкать. Генерим RSA ключ на своей машине.

Про форматы ключей rsa/dsa напишу также отдельно, пока делаем rsa.

ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/bashdays_rsa

Эта команда сгенерит без лишних вопросов новый ключ и положит его в ~/.ssh/.

Параметр -N указывает что на ключе не будет парольной фразы. Если по безопасности упарываешь, то можешь поставить пароль и ебстись с ним в будущем.

Остальные параметры думаю для тебя очевидны. Тип ключа, битность, куда положить.

Теперь у тебя в папке ~/.ssh/ два ключа bashdays_rsa и bashdays_rsa.pub.

Соответственно первый это приватный (храним его как свою жопу), второй это публичный (шлюха ключ).

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

ssh-keygen -y -f ~/.ssh/bashdays_rsa > ~/.ssh/bashdays_rsa.pub

Дело в шляпе.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Тут самое главное не въебать приватный ключ.

Ну а если въебал, сочувствую.

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

Делается так:

ssh-copy-id -i ~/.ssh/bashdays_rsa.pub root@server

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

Важно! Этой командой мы добавили на удаленный сервер ключ для пользователя root.

То есть подключиться по ключам на сервер ты сможешь только под пользователем root. Если у тебя на удаленном сервере какой-то есть юзер, например: suchka, то и команда будет такой:

ssh-copy-id -i ~/.ssh/bashdays_rsa.pub suchka@server

Тут мы поменяли root на suchka.

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

ssh -i ~/.ssh/bashdays_rsa root@server
ssh -i ~/.ssh/bashdays_rsa suchka@server

То есть под рутом и под сучком. Аналогично добавляешь ключи для других юзеров.

Вообще под рутом не рекомендую ключи какие-то прописывать, делай сразу для юзера и через sudoers наруливай ему права.

Я обычно не пользуюсь ssh-copy-id, а сразу ручусь на сервер под паролем, руками создаю файл /home/user/.ssh/authorized_keys и в него просто копирую содержимое публичного ключа bashdays_rsa.pub.

Но тут есть ряд нюансов. У файла authorized_keys должны быть права 600 или 644. Иначе на сервер не пустят. У меня всегда 600.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

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

Ну и однострочник на баше для копирования ключа:

cat ~/.ssh/bashdays_rsa.pub | ssh username@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

Вечерком продолжим. Пока мотай на ус.