удобный и безопасный 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 - при первом подключении разрешает не справшивать у пользователя доверяет ли он хосту

Содержание