Удалённый доступ с аутентификацией по SSH ключу.

Краткий план сегодняшнего видео:
– Долгие рассуждения о безопасном доступе к своим сервера и сервисам(что, зачем, почему и как!);
– Пример генерации ssh ключей на Linux, Windows, MacOS/OSX;
– Сохранения публичного ключа на целевом сервере (с Linux, Windows, MacOS/OSX)

Сегодня я расскажу о том как можно легко и просто заходить на ваши сервера без постоянного ввода имени пользователя и пароля.
Это удобно, если вам нужно просто поработать с вашими файлами, проверить какие-то логи (если они доступны для вашего пользователя). Если что-то нужно будет выполнить от суперпользователя, то пароль нужно будет конечно ввести. Я имею ввиду при вызове sudo.
Так вот, речь пойдёт о доступе к вашим серверам с использованием ssh ключей. Суть в том, что в самом простом случае для удалённого доступа к вашему серверу вам нужно использовать комбинацию логин-пароль. Если у вас серверов больше чем один, то вам нужно запоминать уже минимум два пароля. Плюс один пароль на вход в систему вашего компьютера. Вы же не держите свой рабочий рабочий стол незапароленным? Надеюсь что нет. Итого уже нужно запоминать три пароля. Даже если у вас везде одинаковое имяпользователя, то это не удобно.
Если не использоваться программы для хранения паролей, например, какой-нибудь onepassword, то запоминать сложные пароли становится проблематичным, а простые пароли это очень плохо – их легко подбирают. Или, например, везде использовать один и тот же пароль – тоже плохая идея – если кто-то его заполучил, то он сможет подключиться ко всем вашим серверам. А если простой пароль на всех серверах, то это ужасно. Я не буду говорить “- вон из профессии!” как некоторые любят делать, просто советую почитать первые главы в любой книжке по операционным системам. Там обычно в вводных частях рассказывается о базовых принципах безопасности и всё становится понятно. Я уделяю этому внимание, потому что встречался с людьми которые грешат простыми паролями или ставят один и тот же пароль на несколько систем или сервисов… Такие люди не миф – надеюсь кто-нибудь посмотревший это видео одумается. =) Часто встречаются люди которые ставят одинаковые логин пароли на разные личные сервисы – Вконтакт, Твиттер, Инстаграмм и всякие сайты с доставкой пиццы, а потом у них уводят аккаунты…
Разные пароли на каждый сервис, сервер, сайт – простое правило и его надо запомнить.
Так вот, возвращаясь к доступу на сервера… У вас, например, четыре-пять серверов, может больше. Вы заходите на них с какой-то периодичностью. Помнить всё неудобно. Если серверов десяток, то просто невозможно. Можно пользовать программы для сохранения паролей, но иногда ими пользоваться нельзя или невозможно. Либо просто неудобно.

Для решения такой проблемы достаточно давно был придуман метод аутентификации по ключу- суть в том, что вы создаёте пару ключей – приватный и публичный. Приватный вы храните у себя, а публичный можете раздавать всем. Для создания такой пары ключей можно использовать криптографический алгоритм RSA – подробнее смотрите в википедии или других статьях. Подробная математика там не для начального класса и в ней реально надо разбираться. Но самое главное в том, что данный алгоритм позволяет создать такие ключи – зашифровав что-то вашим публичным ключом расшифровать это можно будет только вашим приватным и более никаким. Например, зная мой публичный ключ, Вы можете написать мне сообщение, зашифровать его моим публичным ключом – расшифровать его могу только я. Правило работает и в обратную сторону – зашифровав что-то своим приватным ключом – расшифровать можно только вашим публичным. Это не подходит для передачи секретной информации, но такой способ подходит скорее только для подтверждения что отправитель вашего, например, сообщения это Вы – так как никто другой зашифровать его не смог бы. Это подходить для аутентификации – зашифровав что-то своим приватным ключом Вы подтверждаете что Вы это Вы.
Таким образом мы дошли до сути – Вы создаёте у себя на компьютере пару ключей – приватный и публичный. Сохраняете свой публичный ключ на всех интересующих вас серверах. При аутентификации сервер будет точно знать, что залогиниться хотите именно Вы -так как приватный ключ только у вас – тоже самое что логин-пароль, но лучше! Длина ключа может быть разной, но обычно она намного больше чем обычный пароль.
Это очень важный момент – длина пароля – обычно они достаточно короткие – 10-15 символов. Никак не сотни символов. Подобрать пароль длиной 10-15 символов теоретически можно. Плюс всякие кейлогеры… С ключами проще – они намного длиннее и не подвержены кейлогерам.
Вот пример 1024 битного ключа(ссылка).

Просто подобрать его практически невозможно. В статье про ssh в Википедии написано следующее:

– Рекомендуется:
Использование длинных SSH2 RSA-ключей (2048 бит и более). Системы шифрования на основе RSAсчитаются надёжными, если длина ключа не менее 1024 бит[6].

Получается, что создав пару публичный-приватный ключ, можно закинуть их на всё ваше серверное оборудование и удобно логиниться – без ввода логин-пароля, но и повысить безопасность!
Непосредственно логин-пароль никто не отменял. Даже если вы запретите доступ по логин-паролю на ваш сервер (что логично), то вам всё равно придётся использовать пароль для вызова sudo на вашем сервере. Если вы ничего не переделывали в правах на вашем сервере, то от вашего пользователя никакие сервисы работать не должны. Даже если кто-то уведёт у вас ваш приватный ключ, то он сможет только удалить файлы в вашей директории, но сменить даже пароль он не сможет – пароль останется не известным и его придётся отдельно подбирать. Это ещё один уровень защиты.
Конечно, если произошло страшное и у Вас увели ваш сертификат, то его придётся удалить на всех серверах где он используется. Далее следует перегенерировать сертификаты.
Ещё важным пунктом и плюсом в наличии сертификата, является, то что Вы можете иметь несколько сертификатов – например, вы можете использовать один набор с рабочего РС, второй с домашнего для доступа к какому-либо вашему серверу. Я сейчас говорю про сервера ваших домашних проектов. Правила безопасности на доступ к корпоративным серверам из дома могут сильно отличаться – зависит от профессионализма админов и службы безопасности и бюджета вашей компании.
Так вот если какой-то сертификат был скомпроментирован, то сразу становится понятно где именно – если ваш рабочий – то увели с рабочего РС, если домашний, то дома. Это полезная информация и она существенно ускоряет процесс расследования и блокировки скомпроментированного оборудования – даже если это всего лишь ваш личный сервер.

В общем такие мысли и доводы у меня есть по поводу ключей. Может что-то забыл, что-то не знаю – напишите в комментариях к видео на канале, если знаете больше.
Надеюсь, что те кто не знали об этом – теперь будут использовать ssh ключи.

Забыл сказать. Есть момент в том что можно потерять свой приватный ключ по какой-то причине – например, вы используете ключ только со своего домашнего РС и он сломался, бекапов нет, что очень не правильно. Что делать? Восстановить ключ невозможно…в этом и задача безопасности.
Обычно всё решается доступом через kvm – на настоящий сервер или через веб-консоль у какого-нибудь VDS/VPS провайдера – бояться этого не надо.

Что нужно сделать для генерации ключей на Windows. Как никак самая популярная десктопная система:
– Скачал zip файл с сайта putty(ссылка на сайт).
– Сгенерировал ключи и сохранил их в файлы (без passphrase):
Утилита PuTTYgen
– Скопировал ключ с РС на сервер(в локальную директорию, используя простой win-scp, pscp или просто копированием текста в файл authorized_keys).
id_rsa.pub
Положил ключ в ~.ssh/authorized_keys
ssh-keygen -i -f /home/use/id_rsa.pub >> ~/.ssh/authorized_keys
-i This option will read an unencrypted private (or public) key file in the format specified by the -m option and print an OpenSSH compatible private (or public) key to stdout.
-f filename Specifies the filename of the key file.

– В настройках putty хосту добавил в имя сохранённого хоста username@server.org
В настройках Connection-SSH-Auth указал путь к приватному ключу.
Сохранил настройки.

Как делается на Linux и Mac?
* Подробности смотри тут:[Video] 14. Как настроить backup вашего сервера, веб.сайта на WordPress? Ubuntu/Linux.
(можно перенести файл через scp, как и в Винде, если нет ssh-copy-id)
– Сгенерировал ключ для пользователя встроенной утилитой ssh-keygen
ssh-keygen -t rsa
– Скопирол ключ на сервер встроенной утилитой ssh-copy или простым копированием текста в ~.ssh/authorized_keys:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@mydomain.ru

Доп.инфа:
Посмотреть на подробный вывод работы утилиты ssh:
ssh -v user@mydomain.ru

Как закрыть доступ не через ключи(раскомментировать)?
sudo nano /etc/ssh/sshd_conf
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no

Подключить к серверу игнорируя наличие ключа:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@host

Генерация файла с новым именем – для каждого сервера может быть своё имя.
ssh-keygen -t rsa -f ~/.ssh/id_rsa_test

На этом всё.
Удачи!