Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
linux:ssh:key [2021/10/12 01:20] werwolf |
linux:ssh:key [2023/11/12 11:24] (текущий) werwolf |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Авторизация по ключу SSH ====== | ||
| + | |||
| + | |||
| + | ===== Как работают ключи SSH? ===== | ||
| + | |||
| + | SSH сервер может выполнять аутентификацию пользователей с помощью различных алгоритмов. Самый популярный - это аутентификация по паролю. Он достаточно прост, но не очень безопасный. Пароли передаются по безопасному каналу, но они недостаточно сложны для противостояния попыткам перебора. Вычислительная мощность современных систем в сочетании со специальными скриптами делают перебор очень простым. Конечно, существуют другие способы дополнительной безопасности, например, fail2ban, но аутентификация по ключу SSH более надежна. | ||
| + | |||
| + | Каждая пара ключей состоит из открытого и закрытого ключа. Секретный ключ сохраняется на стороне клиента и не должен быть доступен кому-либо еще. Утечка ключа позволит злоумышленнику войти на сервер, если не была настроена дополнительная аутентификация по паролю. | ||
| + | |||
| + | Открытый ключ используется для шифрования сообщений, которые можно расшифровать только закрытым ключом. Это свойство и используется для аутентификации с помощью пары ключей. Открытый ключ загружается на удаленный сервер, к которому необходимо получить доступ. Его нужно добавить в специальный файл ~/.ssh/authorized_keys. | ||
| + | |||
| + | Когда клиент попытается выполнить проверку подлинности через этот ключ, сервер отправит сообщение, зашифрованное с помощью открытого ключа, если клиент сможет его расшифровать и вернуть правильный ответ - аутентификация пройдена. | ||
| + | |||
| + | {{ :linux:ssh:fetch.png |}} | ||
| + | ===== Как создать ключи SSH? ===== | ||
| + | |||
| + | Сначала необходимо создать ключи ssh для аутентификации на локальном сервере. Для этого существует специальная утилита ssh-keygen, которая входит в набор утилит OpenSSH. По умолчанию она создает пару 2048 битных RSA ключей, которая подойдет не только для SSH, но и для большинства других ситуаций. | ||
| + | |||
| + | И так, генерация ключей ssh выполняется командой: | ||
| + | |||
| + | <code bash> | ||
| + | ssh-keygen | ||
| + | </code> | ||
| + | |||
| + | {{ :linux:ssh:fetch_2.png |}} | ||
| + | |||
| + | Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке ~/.ssh/. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa, а публичный id_rsa.pub. | ||
| + | |||
| + | Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Его можно не указывать, если не хотите. Использование дополнительного шифрования имеет только один минус - необходимость вводить пароль, и несколько преимуществ: | ||
| + | |||
| + | * Пароль никогда не попадет в сеть, он используется только на локальной машине для расшифровки ключа. Это значит что перебор по паролю больше невозможен. | ||
| + | * Секретный ключ хранится в закрытом каталоге и у клиента ssh нет к нему доступа пока вы не введете пароль; | ||
| + | * Если злоумышленник хочет взломать аутентификацию по ключу SSH, ему понадобится доступ к вашей системе. И даже тогда ключевая фраза может стать серьезной помехой на его пути. | ||
| + | |||
| + | |||
| + | |||
| + | Но все же, это необязательное дополнение и если не хотите, то вы можете просто нажать Enter. Тогда доступ по ключу ssh будет выполняться автоматически и вам не нужно будет что-либо вводить. | ||
| + | |||
| + | Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере. | ||
| + | |||
| + | ===== Загрузка ключа на сервер ===== | ||
| + | |||
| + | Когда генерация ключей завершена, нам осталось только загрузить ключ на сервер. Для загрузки ключа можно использовать несколько способов. В некоторых случаях вы можете указать ключ в панели управления сервером, например, сPanel или любой другой. Но мы такой способ рассматривать не будем. Мы рассмотрим ручные способы. | ||
| + | |||
| + | Самый простой способ скопировать ключ на удаленный сервер - это использовать утилиту ssh-copy-id. Она тоже входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH. Синтаксис команды: | ||
| + | |||
| + | <code bash> | ||
| + | ssh-copy-id username@remote_host | ||
| + | </code> | ||
| + | |||
| + | {{ :linux:ssh:fetch_3.png |}} | ||
| + | |||
| + | При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id.rsa.pub для загрузки его на сервер в файл ~/.ssh/authorized_keys. Дальше вы можете выполнять аутентификацию с помощью этого ключа. | ||
| + | |||
| + | Если такой способ по какой-либо причине для вас не работает, вы можете скопировать ключ по ssh вручную. Мы создадим каталог ~/.ssh, а затем поместим наш ключ в файл authorized_keys с помощью символа >>, это позволит не перезаписывать существующие ключи: | ||
| + | |||
| + | <code bash> | ||
| + | cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" | ||
| + | </code> | ||
| + | |||
| + | Здесь вам тоже нужно набрать yes, если вы подключаетесь к новому серверу, а затем ввести пароль. Теперь вы можете использовать созданный ключ для аутентификации на сервере: | ||
| + | |||
| + | <code bash> | ||
| + | ssh username@remote_host | ||
| + | </code> | ||
| + | |||
| + | |||
| + | Если вы не захотели создать ssh ключ с доступом по паролю, то вы сразу же будете авторизованы, что очень удобно. Иначе, сначала вам придется ввести фразу-пароль для расшифровки ключа. | ||
| + | |||
| + | ===== Отключение проверки пароля ===== | ||
| + | |||
| + | Если пароль больше не будет использоваться, то для увеличения безопасности системы лучше его вовсе отключить. Но убедитесь, что ключ надежно сохранен и вы его не потеряете, потому что по паролю вы больше не войдете. Авторизуйтесь на сервере, затем откройте конфигурационный файл /etc/ssh/sshd_config и найдите там директиву PasswordAuthenticatin. Нужно установить ее значение в No: | ||
| + | |||
| + | <code bash> | ||
| + | sudo vi /etc/ssh/sshd_config | ||
| + | |||
| + | PasswordAuthentication no | ||
| + | </code> | ||
| + | |||
| + | {{ :linux:ssh:fetch_4.png |}} | ||
| + | |||
| + | Теперь сохраните файл и перезапустите службу ssh: | ||
| + | |||
| + | <code bash> | ||
| + | sudo service ssh restart | ||
| + | </code> | ||
| + | |||
| + | Дальше будет возможно только подключение по ключу ssh, пароль не будет приниматься. | ||
| + | |||
| + | |||