- An ideal ssh flow
- Certificate authentication
- Certificate authentication improves operability
- Certificate authentication improves security
- Certificate authentication improves usability
- Загрузка ssl на сервер
- Загрузка через операционную систему windows
- Конфигурация nginx для ssl
- Логирование ssh подключений по сертификату
- Настройка ssh сертификатов на сервере
- Настройка подключения putty с использованием ssh сертификата
- Онлайн курс “sre практики и инструменты”
- Перенос из unix-систем
- Подготовка к установке
- Подготовка папок
- Помогла статья? подписывайся на telegram канал автора
- Предварительная настройка сервера
- Преобразуем приватный ключ в формат ключа putty
- Проверяем настройки
- Установка
- Финальная настройка сервера
An ideal ssh flow
SSH certificate authentication is the foundation of what I think is the ideal SSH flow.
Certificate authentication
Certificate authentication eliminates key approval and distribution. Instead of scattering public keys across static files, you bind a public key to a name with a certificate. A certificate is just a data structure that includes a public key, name, and ancillary data like an expiration date and permissions. The data structure is signed by a certificate authority (CA).
Certificate authentication improves operability
Eliminating key approval and distribution has immediate operational benefits. You’re no longer wasting ops cycles on mundane key management tasks, and you eliminate any ongoing costs associated with monitoring and maintaining homegrown machinery for adding, removing, synchronizing, and auditing static public key files across your fleet.
Certificate authentication improves security
While the SSH protocol itself is secure, public key authentication encourages a bunch of bad security practices and makes good security hygiene hard to achieve.
With public key authentication, keys are trusted permanently. A compromised private key or illegitimate key binding may go unnoticed or unreported for a long time. Key management oversight (e.g., forgetting to remove an ex-employee’s public keys from hosts) results in SSH failing open: unauthorized access without end.
Certificate authentication improves usability
With public key authentication, when you SSH to a remote host for the first time, you’ll be presented with a security warning like this:
Загрузка ssl на сервер
Файлы .CA и .CRT необходимо отправить на сервер. Часто Linux-серверы администрируют через терминал и GUI может отсутствовать. В этом случае можно отправить файлы на машину с другой ОС, а затем их перенести. Ниже мы расскажем, как это можно осуществить.
Важно: пара (закрытый и открытый ключи) должна быть сгенерирована там, куда устанавливаются сами сертификаты. Однако если они были созданы на другом компьютере, на ваш сервер следует отправить закрытый ключ (файл .key), в соответствии с описанными ниже действиями по копированию.
Загрузка через операционную систему windows
Запускаем. Откроется окно, куда необходимо ввести параметры подключения по протоколу SSH.
Слева вы увидите папки и файлы локальной машины, справа — файлы рабочего сервера, к которому подключились. Следует выбрать (либо создать, если такового нет) место, куда отправятся сертификаты. Используя функцию drag-n-drop, зажав левую клавишу мышки, переносите файлы .CA и .CRT.
Важно: удобнее будет сохранить .key в том же месте, где уже лежат файлы сертификатов. Это необязательно, но тогда вам придется запоминать расположение этого файла и указывать этот путь при конфигурации Apache, а не путь с нашего примера.
Чтобы сделать копию .key и отправить в иную директорию, в случае генерации закрытого ключа на сервере, можно воспользоваться командой:
cp /home/root/private.key /etc/ssl/private.key
При этом:
cp — отвечает за копирование;/home/root/ — путь к файлу, если вы зашли «под рутом»;private.key — имя файла самого ключа;/etc/ssl/private.key — путь, куда мы хотим скопировать ключ.
Можно воспользоваться командой и удалить ключ в старой директории:
rm /home/root/private.key
Конфигурация nginx для ssl
Обратите внимание: на Ubuntu/Debian-дистрибутивах параметры веб-ресурсов Nginx обычно размещаются в директории /etc/nginx/sites-enabled/. В дистрибутиве CentOS стандартной директорией считается /etc/nginx/conf.d/.
Важно для дистрибутива CentOS: в случае отсутствия редактора nano, можно установить его следующим образом:
yum install nano
Добавьте параметры из примера к вашей конфигурации:
listen 443 ssl;ssl_certificate /etc/ssl/testdomain.crt;ssl_certificate_key /etc/ssl/test.key;
Не забудьте поменять на ваши:/etc/ssl/test.crt — прописать расположение ваших сертификатов;/etc/ssl/test.key — прописать расположение закрытого ключа.
Сделаем рестарт:
Рестарт на Debian и Ubuntu:
/etc/init.d/nginx restart
Рестарт на CentOS:
service nginx restart
Допустим, у вас есть настроенный iptables firewall. В этом случае следует открыть 443 порт. Просто обратитесь к документации той системы, которую используете. Различные дистрибутивы Linux могут работать с iptables по-своему. Вот пара примеров:
Для CentOS пишем:
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Ubuntu 16.04 более лаконичен:
ufw allow 443/tcp
В Debian пишем следующее:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
Логирование ssh подключений по сертификату
Мне необходимо знать, когда и какой сертификат подключался к серверу. По-умолчанию такой информации чаще всего в логах не остается. Исключение я заметил только в CentOS 7. Там с дефолтными настройками ssh и уровнем логирования INFO отображается отпечаток ключа в логе:
# cat /var/log/secure
Настройка ssh сертификатов на сервере
Выполним генерацию ключей SSH.
ssh-keygen -a 1000 -b 4096 -o -t rsa
Укажем путь хранения ключа и его имя
/root/.ssh/id_rsa
💡 В моем случае при создании сертификата для root оказалось важным указать жесткий путь /root/.ssh/, вместо относительного ~/.ssh/ чтобы избежать ошибки SSH Server refused our key.
Система так же создаст публичный ключ по данному пути.
Указываем ключевую фразу для доступа к приватному ключу.
Добавляем содержимое файла публичного ключа к файлу сертификата авторизации SSH.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Перезапускаем SSH
sudo service ssh restart
Настройка подключения putty с использованием ssh сертификата
Добавьте приватный сертификат в подключение:
Connection > SSH > Auth > Private key file for authentication
При успешном подключении после ввода имени пользователя, выйдет запрос ключевой фразы сертификата, после чего вход на сервер должен быть успешно выполнен.

💡 Если при входе на сервер вы получаете сообщение SSH Server refused our key, проверьте правильность прав на папку .ssh и файл authorized_keys, а так же что вы входите под тем именем пользователя, в authorized_keys которого добавлен ваш ключ.
Онлайн курс “sre практики и инструменты”
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с
онлайн-курсом “SRE практики и инструменты”
в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
На курсе вы узнаете как:
- Внедрить SRE практики в своей организации
- Управлять надежностью, доступностью и эффективностью сервисов
- Управлять изменениями
- Осуществлять мониторинг
- Реагировать на инциденты и производительность
- Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.
Проверьте себя на вступительном тесте и смотрите подробнее программу по
Перенос из unix-систем
В данном случае самым простым вариантом будет воспользоваться встроенной опцией терминала – SCP:
1. Файлы .CA и .CRT скачиваются из панели Serverspace на ваш компьютер.
2. Открываем терминал и переходим в место скачивания сертификатов, например:
cd ~/MyDownloadedFiles
Детальнее:
Подготовка к установке
В контексте данной инструкции полагается, что установка будет проходить на «чистом» сервере. Для корректной работы GitLab потребуются:
- CentOS 6/7;
- Postfix;
- Open SSH;
- Ruby;
- Go;
- Nodejs;
- База данных (PostgreSQL или MySQL);
- Redis;
- Nginx.
Подготовка папок
Выполняем подготовку папок и файла ключа на сервере.
Важный момент при настройке авторизации SSH по ключам — это указать правильные Права доступа на папку и файл ключа.
Выполните:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
Помогла статья? подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Предварительная настройка сервера
Разрешим вход с использованием публичного сертификата SHH на сервер и укажем путь до сертификата в настройках SSH, файл sshd_config.
nano /etc/ssh/sshd_config
Раскомментируйте или добавьте значения:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
Преобразуем приватный ключ в формат ключа putty
💡 При попытке использовать скопированный ключ, PuTTY покажет ошибку: Unable to use key file (OpenSSH SSH-2 private key (new format)).
- Скопируйте приватный ключ id_rsa (или содержимое ключа в файл) на локальный компьютер;
- Запустите программу puttygen (из папки PuTTY);
- Нажмите кнопку Load и выберите файл приватного ключа;
- Введите пароль на приватный сертификат;
- Нажмите Save private key для сохранения приватного ключа в нужном формате (вы можете изменить Key comment, это не повлияет на работу ключа).

Проверяем настройки
Подборки SSL-сертификатов: DV сертификат для домена, EV сертификат “зеленая строка”, WC сертификат для поддоменов, SAN мультидоменный сертификат.
Установка
Существует 3 способа установки GitLab:
- Установка пакета;
- Установка из репозитория;
- Сборка и установка из исходников.
Рекомендуемым разработчиками вариантом является установка GitLab из репозитория. Для того чтобы установить GitLab из репозитория необходимо выполнить следующие действия:
Установим необходимые зависимости:
sudo yum install -y curl policycoreutils-python openssh-server
Данная команда установит следующие пакеты:
cURL, OpenSSH-Server и PolicyCoreUtils-Python
После установки данных пакетов необходимо запустить и включить в автозагрузку OpenSSH-Server. Для этого поочередно вводим следующие команды:
Включаем OpenSSH-Server в автозагрузку:
sudo systemctl enable sshd
Запускаем OpenSSH-Server:
sudo systemctl start sshd
Далее установим Postfix для отправки уведомлений на электронную почту. Для этого необходимо выполнить следующие команды:
Устанавливаем Postfix:
sudo yum install postfix
Добавляем Postfix в автозагрузку:
sudo systemctl enable postfix
Запускаем Postfix:
sudo systemctl start postfix
В процессе установки Postfix может открыть экран конфигурации. Вам необходимо выбрать «Internet-site» и нажать Enter. Для «mail name» необходимо указать внешний DNS вашего сервера, после чего нажать Enter. Если в процессе установки будут появляться дополнительные экраны, просто продолжайте нажимать Enter, чтобы установить значения по умолчанию.
Финальная настройка сервера
Последний шаг настройки SSH — отключение возможности входа на сервер по паролю, в файле конфигурации.
nano /etc/ssh/sshd_config
Раскомментируйте или добавьте значениe:
PasswordAuthentication no
После чего перезапустите службу SSH.
sudo service ssh restart
Настройка авторизации по сертификату SSH — завершена!
