удобный и безопасный ssh

удобный и безопасный ssh


UPD 2021.11.19: подготавливая сервера под сертификацию для банковских проверяющих был рождён sshd_config проходящий аудит ssh-audit.com, найти его можно тут, обещаю переодически актуализировать.

1) на клиенте

генерируем ключ и задаём ему пароль (для параноиков можно сменить путь хранения файла на какой нибудь безопасный носитель)

ssh-keygen

2) на сервере

добавляем содержимое файла ПУБЛИЧНОЙ части ключа (по умолчанию приватная часть ключа это ~/.ssh/id_rsa а публичная это ~/.ssh/id_rsa.pub) в список разрешённых для авторизации

для определённого пользователя это /home/USERNAME/.ssh/authorized_keys, для рута это /root/.ssh/authorized_keys

просто копируем содержимое файла с клиента внутрь файла на сервере

если всё ещё доступен доступ по паролю то можно так:

ssh-copy-id USERNAME@ADDRESS

после чего убеждаемся что при попытке подключиться спрашивается пароль ключа (если есть) а не пользователя на сервере и с ним пускает

3) на сервере

правим конфиг ssh сервера (файл /etc/ssh/sshd_config)

в данном случае нас интересуют всего две директивы

PasswordAuthentication no
PubkeyAuthentication yes

после чего перезапускаем демона

systemctl restart sshd.service

4) на клиенте

создаём конфиг для облегчения жизни (конфиг пользователя находится в папке пользователя /home/USERNAME/.ssh/config, так же есть конфиг для всех пользователей системы /etc/ssh/ssh_config)

содержимое примерно такое:

Host blablabla
User admin
HostName 192.168.XXX.YYY

Host superhost
User root
HostName 192.168.NNN.MMM
IdentityFile /mnt/supersecretpath/oversecurekey

Host *
ForwardAgent yes
IdentityFile /home/USERNAME/.ssh/id_rsa
ForwardX11 yes
ForwardX11Trusted yes
Port 22
Protocol 2
ControlMaster auto
ControlPath /run/user/USERID/ssh-%r@%h:%p
AddKeysToAgent yes
Compression yes
StrictHostKeyChecking accept-new

таким образом команды ssh blablabla и ssh superhost приведут меня на нужный мне сервер под нужной мне учёткой не спрашивая пароля (ключ в память добавляется при первом использовании ssh или руками через ssh-add) и имя нужной мне учётки

конфиг считывается по приницпу первого совпадения поэтому Host * должен идти последним и являть собой совпадение для любых хостов неописанных выше

так же параметры Host * так же добавляются для всех вышестоящих хостов если не были переопределены выше

пояснение параметров:

Host - краткое имя для хоста по которому в дальнейшем подключаться

User - имя пользователя под которым подключаться

HostName - ip или доменное имя по которому подключаться

ForwardAgent - разрешать использовать ключ с клиента для дальнейшего подключение сквозь этот хост на следующий (ключ не остаётся на машине после отключения)

IdentityFile - путь до ключа

ForwardX11 - разрешает использовать X over ssh

ControlMaster и ControlPath - нужны для того чтобы при необходимости использовать несколько терминалов все они ездили через одну ssh сессию и не поднимали каждый свою (экономит трафик и ресурсы)

AddKeysToAgent - разрешает добавлять ключ в агент автоматически при первом подключении

Compression - сжатие

StrictHostKeyChecking accept-new - при первом подключении разрешает не справшивать у пользователя доверяет ли он хосту

Содержание