в debian, ubuntu

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

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.

Добавить комментарий

  1. А как на счет passphrase, не практикуете?
    С одной стороны пароль на приватный ключ безопасней, с другой — не удобно каждый раз вводить, даже если используется ssh-agent. Использовать 1 пару криптоключей с фразой для логина на все сервера — удобно, но не безопасно 🙂 А для каждого сервера свою пару ключей з фразой — постоянно вводить фразу для
    У меня 2 варианта:
    1) В ~/.ssh/config создать alias для каждого сервера с соответствующим identityfile — но фразу-то придеться вводить каждый раз при подключении к серверу.
    2) ssh-agent + ssh-add on startup — но для каждого ключа вводить фразу все равно придеться…
    Каково ваше мнение, как вы с этим боретесь на практике?)

    • passphrase не практикую — вводить каждый раз пароль действительно неудобно, к тому же бывают ситуации, когда нужно «автоматически» подключаться к серверам (например кроновая задача, которая будет что-то копировать по scp с удаленного сервера)…
      Если вы подключаетесь к серверам по ключу с одного и того же рабочего места (ноут/рабочий комп), то можно обойтись без passphrase (конечно, пароль на рабочем месте тоже должен быть надежным). При подключении с других компьютеров используйте логин/пароль (естественно, не рутовый)