Так сложилось, что я больше всерьез не воспринимаю аутентификацию на сервере посредством связки 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

После чего сформированное сообщение пример вид:

Сформированное сообщение для отправки публичного ключа через mutt

И останется только нажатьy” (Send) Для того, чтобы отправить публичный ключ.

Mail sent.

Сообщение отправлено.

Выходим из консольного клиента Muttчерез нажатие клавишиq”

А вот и сообщение на почтовом ящике (с вложением):

Сообщение получено

  • А уже после содержимое id_rsa.pub добавляет в файл authorized_keys на сервер ответственный сотрудник

ekzorchik@srv-serv:~$ cat id_rsa.pub >> .ssh/authorized_keys

Как видно все просто и все работает. Отчасти некоторые команды я частенько применяю для своих обслуживающих систем, так что все представленное здесь работает.

В следующей заметки я покажу, как настроить авторизацию клиента putty на системе Windows через публичный ключ к данной серверной части. А пока прощаюсь. До встречи, с уважением автор блога — ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru