Так сложилось, что я больше всерьез не воспринимаю аутентификацию на сервере посредством связки login + Password, было много случаев даже среди коллег по части администрирования, что пароли выдаваемые им вообще для них не представляли хоть какой то важности, забывались иногда даже можно было утянуть сохраненные из реестра или других мест.
Поэтому было принято решение, перевести безопасное подключение к серверу посредством SSH через авторизацию по ключам.
Ниже пример конфигурационного файла sshd_config в моей системе Ubuntu 12.04.5 Server amd64
ekzorchik@srv-serv:~$ sudo apt-get install openssh-server -y
ekzorchik@srv-serv:~$ sudo nano /etc/ssh/sshd_config
port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
# включить авторизацию в системе на основе публичных ключ присутствующий в файле
PubkeyAuthentication yes
#для файла ключа в домашней папке пользователя
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords no
# запретить авторизацию в системе по связке login+password
PasswordAuthentication no
TCPKeepAlive yes
PrintMotd no
PrintLastLog yes
Сохраняем внесенные изменения.
Теперь нужно перезапустить службу ssh в системе:
ekzorchik@srv-serv:~$ sudo service ssh restart
ssh stop/waiting
ssh start/running, process 2521
Для справки:
сервер — 192.168.1.42
клиент — 192.168.1.43
Теперь если кто-либо будет пытаться подключиться к системе и зная только пароль от учетной записи, но его ждет ошибка авторизации:
ekzorchik@srv-client:~$ ssh -l ekzorchik 192.168.1.42
The authenticity of host ‘192.168.1.42 (192.168.1.42)’ can’t be established.
ECDSA key fingerprint is 8e:c4:43:01:90:ca:2f:17:ec:a9:41:2d:12:11:7b:ff.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.1.42’ (ECDSA) to the list of known hosts.
Permission denied (publickey).
Уведомляющая, что доступ к системе можно получить только с помощью публичного ключа добавленного в файл ssh/authorized_keys, исходя из этого сформирую публичный ключ клиентской станции и произведу его копирование на сервер, это может сделать, уже авторизованная рабочая станция или пользователь, либо можно на время включить авторизацию по логину и паролю, а уже потом запретить ее, как только публичный ключ будет на сервере, вот так пока и поступлю:
ekzorchik@srv-serv:~$ sudo nano /etc/ssh/sshd_config
#PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
PasswordAuthentication yes
ekzorchik@srv-serv:~$ sudo service ssh restart
Теперь добавляю публичный ключ на сервер с клиентской станции:
ekzorchik@srv-client:~$ ssh-keygen -t rsa
ekzorchik@srv-client:~$ cat ~/.ssh/id_rsa.pub | ssh -p 22 ekzorchik@192.168.1.42 'umask 077;test -d .ssh | mkdir .ssh; cat >> .ssh/authorized_keys'
Теперь возвращаем настройки сервера в измененное положение где авторизация будет идти только по ключам:
ekzorchik@srv-serv:~$ sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PasswordAuthentication no
Сохраняем внесенные изменения.
ekzorchik@srv-serv:~$ sudo service ssh restart
Теперь пробуем клиентской станцию авторизоваться в системе и подключение проходит успешно без какого либо ввода пароля:
ekzorchik@srv-client:~$ ssh -l ekzorchik 192.168.1.42
или так:
ekzorchik@srv-client:~$ ssh 192.168.1.42
Отлично работает.
На сервере можно просмотреть вывод, когда имело место быть подключение клиентской станции:
ekzorchik@srv-serv:~$ lastlog | grep ekzorchik | awk ‘{print $1,$3,$4,$5,$6,$7}’
ekzorchik 192.168.1.43 Mon Nov 17 22:46:59
(хотя это и не столь важно в этой заметке)
Но такое положение дел, как переизменение конфига sshd_config для добавление еще одного ключа с другой станции меня не устраивает, поэтому, добавление еще одного публичного ключа может взять на себя Администратор уже имеющий доступ или распространение обновленного файла authorized_keys через систему управления к примеру: spacewalk,pupplet,chef и многих других. Позже я рассмотрю как это делать на практике. Ведь мой блог как раз и посвящен практическим действиям для реализации той или иной задумки.
Дальнейшие шаги добавление ключа на сервер сводятся к следующему:
- клиент генерирует публичный ключ своей станции
ssh-keygen -t rsa
- пересылает ответственному
к примеру по почте, но сперва ему понадобиться настроить к примеру ssmtp для отправки, как настроить ssmtp смотрите эту заметку, там расписано пошагово, но лучше конечно же приведу команды здесь:
ekzorchik@srv-client:~$ sudo apt-get update –fix-missing
ekzorchik@srv-client:~$ sudo apt-get remove postfix -y
ekzorchik@srv-client:~$ sudo apt-get install ssmtp mailutils -y
ekzorchik@srv-client:~$ sudo nano /etc/ssmtp/ssmtp.conf
mailhub = smtp.yandex.ru:465
AuthUser=ekzorchik@ekzorchik.ru
AuthPass=<мой_пароль_на_почтовый_ящик>
rewriteDomain=ekzorchik.ru
UseTLS=YES
FromLineOvveride=YES
# почтовый адрес postmaster домена ekzorchik.ru Должен существовать
Root=postmaster
ekzorchik@srv-client:~$ sudo nano /etc/ssmtp/revaliases
ekzorchik:ekzorchik@ekzorchik.ru:smtp.yandex.ru:465
ekzorchik@srv-client:~$ sudo apt-get install mutt -y
ekzorchik@srv-client:~$ cp ~/.ssh/id_rsa.pub ~/
ekzorchik@srv-client:~$ mutt
Создаем письмо:
нажимаем “m”
указываем кому отправить создаваемое почтовое сообщение:
To: ekzorchik@ekzorchik.ru
указываем тему письма:
Subject: SSh pubkey id_rsa.pub srv-client
Указываем содержимое письма:
id_rsa.pub for system
Сохраняем все что указали в содержимом письма: Ctrl + O, Ctrl +X
Далее указываем, что в письмо нужно добавить еще вложение, нажимаем – “a”
Attach file (‘?’ for list):
Attach file: /home/ekzorchik/id_rsa.pub
После чего сформированное сообщение пример вид:
И останется только нажать “y” (Send) Для того, чтобы отправить публичный ключ.
Mail sent.
Сообщение отправлено.
Выходим из консольного клиента Mutt – через нажатие клавиши “q”
А вот и сообщение на почтовом ящике (с вложением):
- А уже после содержимое id_rsa.pub добавляет в файл authorized_keys на сервер ответственный сотрудник
ekzorchik@srv-serv:~$ cat id_rsa.pub >> .ssh/authorized_keys
Как видно все просто и все работает. Отчасти некоторые команды я частенько применяю для своих обслуживающих систем, так что все представленное здесь работает.
В следующей заметки я покажу, как настроить авторизацию клиента putty на системе Windows через публичный ключ к данной серверной части. А пока прощаюсь. До встречи, с уважением автор блога — ekzorchik.