SSH авторизация по ключу

Dec 3, 2015 15:53 · 269 words · 2 minute read ssh

Протокол SSH позволяет авторизоваться на удаленном сервере без необходимости ввода пароля, используя криптосистему с открытым ключом (асимметричное шифрование) и аутентификации вызов-ответ. Давайте разберемся с авторизацией по SSH-ключу!

Ключ состоит из двух частей — открытой (находится на удаленном сервере) и закрытой (находится на локальном компьютере). При запросе соединения, удаленный сервер с помощью открытого ключа создает и отправляет на локальный компьютер вызов (зашифрованное сообщение), который может быть прочитан только держателем закрытого ключа. На этот вызов клиент отправляет серверу соответствующий ответ, и, если он правильный, то предоставляется доступ к удаленному серверу.

Ключ генерируется с помощью утилиты ssh-keygen, например:

ssh-keygen -C "$(whoami)@$(hostname)-$(date -I)"

Если при генерации ключа на все вопросы был дан стандартный ответ (клавишей Enter), то в каталоге ~/.ssh/ появится два файла — id_rsa (закрытый ключ) и id_rsa.pub (открытый ключ).

Открытый ключ нужно скопировать на удаленный сервер, это можно сделать с помощью команды ssh-copy-id, например так:

ssh-copy-id user@server

Примечание. Считаем, что пользователь user уже создан на удаленном сервере (server) и известен его пароль.

Еще один способ скопировать открытый ключ на удаленный сервер — скопировать содержимое ~/.ssh/id_rsa.pub с локального компьютера в файл ~/.ssh/authorized_keys на удаленном хосте. Важно: чтение/запись в этот файл может производить только владелец, добиться этого можно командой:

chmod 600 ~/.ssh/authorized_keys

При первом подключении к серверу будет задан вопрос доверяете ли вы ключу, на который нужно ответить утвердительно (иначе соединение закроется), после чего ключ будет сохранен в файл ~/.ssh/known_hosts. Если ключ сервера будет изменен (например, вследствие переустановки сервера), то при подключении появится ошибка.

Примечание. При клонировании виртуальных серверов также обязательно нужно перегенерировать ssh-ключи.

При необходимости, можно для каждого удаленного сервера указать отдельный ключ аутентификации — это делается с помощью алиасов в SSH.

tweet Share