администрирование,

Как настроить SSH аутентификацию при помощи открытого ключа

Jul 30, 2019 · 4 мин. на прочтение
Как настроить SSH аутентификацию при помощи открытого ключа
Поделиться

Использование аутентификации с помощью открытого ключа SSH для подключения к удаленной системе является надежной и более безопасной альтернативой входу в систему с паролем учетной записи или парольной фразой. Аутентификация с открытым ключом SSH опирается на асимметричные криптографические алгоритмы, которые генерируют пару ключей, один из которых является «закрытым», а другой - «открытым». Вы храните закрытый ключ в секрете и храните его на компьютере, который используете для подключения к удаленной системе. Открытым ключём вы можете поделиться с кем угодно, не ставя под угрозу закрытый ключ; вы храните его в удаленной системе в хранилище .ssh/authorized_keys.

Рекомендую предварительно ознакомиться со статьёй SSH - коротко о главном

Для нетерпеливых

Коротко расскажу общий подход как настроить SSH аутентификацию при помощи открытого ключа.

Генерируем пару ключей (ниже я расскажу, как это сделать). Закрытый будем использовать на клиенте, для подключения по ssh. Открытый передаём на удалённый сервер и помещаем его в хранилище авторизованных ключей (~/.ssh/authorized_keys).

ВАЖНО: если на сервере не выставить разрешения chmod 600 и chown, для authorized_keys, то авторизация работать не будет. За этим следит sshd. В этой статье я покажу как это правильно сделать.

После того как сгенерили и разместили ключи нужно на удалённом сервере отредактировать sshd_config - отключить авторизацию по паролю, чтобы использовать только сертификат, а также, не обязательно, но желательно, отключить PAM и разрешение входа по SSH под root-ом.

Полный перечень команд

ssh username@servername

mkdir ~/.ssh
chmod 700 ~/.ssh

scp c:\path_to_file\.ssh\id_rsa.pub username@servername:~/.ssh/username_rsa.pub

cd ~/.ssh
cat username_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chown $USER:$USER ~/.ssh -R

`/etc/ssh/sshd_config`
RSAAuthentication yes
PasswordAuthentication no

sudo service sshd restart

Теперь по порядку.

Для работы нам понадобиться установленный OpenSSH. К сведению пользователей Windows - OpenSSH был добавлен в Windows осенью 2018 года и включен в Windows 10 и Windows Server 2019.

Создаём пару ключей.

На компьютере, с которого вы хотите осуществлять подключение, генерируем пару ключей (открытый (id_rsa.pub)/закрытый (id_rsa)). Для этого выполните команду

ssh-keygen -t rsa -b 4096

Программа попросит вас ввести имя файла закрытого ключа (по умолчанию id_rsa). Если не хотите ничего менять, то просто нажимайте Enter. Далее Вас попросят ввести пароль (парольную фразу). Этот шаг можно пропустить и не вводить пароль, нажав Enter. Но имейте ввиду, что в этом случае, любой, кто завладеет вашим закрытым ключом, сможет им воспользоваться. Если Вы введёте пароль, то он будет спрашиваться у Вас каждый раз при использовании закрытого ключа. Я рекомендую всегда вводить пароль, тем самым защищать свой закрытый ключ. Затем Вас попросят повторить пароль, для контроля правильности ввода. В результате программа сгенерирует пару ключей и поместит их в каталог ~/.ssh. Результат работы программы виден на скриншоте.

assets/images/set-up-ssh-with-public-key/1.jpg

Передаём открытый ключ на сервер

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

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

ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_host

ВАЖНО: Передавать нужно именно публичный ключ! Никогда не передавайте закрытый ключ. Он всегда должен оставться только у Вас!

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

Для начала нам нужно подключиться к удалённому серверру, на который мы планируем, в последствии, авторизоваться с помощью открытого ключа.

ssh username@servername

Если на сервере ещё нет каталога ~/.ssh, то выполните на нём следующие команды.

mkdir ~/.ssh
chmod 700 ~/.ssh

Теперь на компьютере, на котором мы создавали нашу пару ключей, выполните команду, которая скопирует публичный ключ на удалённый сервер, в каталог ~/.ssh.

scp c:\path_to_file\.ssh\id_rsa.pub username@servername:~/.ssh/username_rsa.pub

Затем возвращаемся на удалённый сервер и выполняем следующие команды.

cd ~/.ssh
cat username_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chown $USER:$USER ~/.ssh -R

Теперь нам необходимо правильно настроить SSH на сервере. Для этого нужно отредактировать /etc/ssh/sshd_config следующим образом.

  • RSAAuthentication yes
  • PasswordAuthentication no

Для вступления изменений в силу перезапустите sshd:

sudo service ssh restart

Для CentOS

sudo service sshd restart

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

assets/images/set-up-ssh-with-public-key/2.jpg

ssh
Заходите в группу Telegram
Если есть вопросы или хотите пообщаться, то заходите в мою группу Telegram.