Ssh ключ что это – Для чего нужен ssh ключ

Содержание

Для чего нужен ssh ключ

ssh ключи используются для облегчённой авторизации на различных сервисах, мы в своём проекте тоже можем использовать для централизованной авторизации
ssh ключ состоит из двух частей
id_rsa — закрытая часть, которая должна быть доступна только вам, ни кому и ни когда нельзя давать к ней доступ, этот файл можно переносить с компа на ком. так чтобы был у вас был только 1 ключ, но тут свои риски, например у вас в одном месте кто-то получил доступ к $HOME, следовательно все ваши акаунты потенциально взломали
id_rsa.pub — открытая часть, бесполезна без закрытой, её можно показывать всем, можно даже повесить на своём сайте, чтобы желающие дать вам доступ на свой сервер могли быстро добавить ваш открытый ключ в файл

~/.ssh/authorized_keys
бывает так, что вам дают только ftp доступ, но очень часто бывает так, что пользователь ftp это обычный пользователь в Linux, а значит возможно подключиться по ssh на этот сервер, для этого нужно по ftp создать файл ~/.ssh/authorized_keys и положить туда свой открытый ключь, часто помогает

ну а мы сейчас будем использовать ssh ключ, для авторизации на github, по сути, там огромный сервер, с кучей пользователей, у каждого своя домашняя папка в которой лежата каталоги проектов
и беря у вас ваши открытые ключи, я их добавляю в ~/.ssh/authorized_keys чтобы у вас была возможность вносить изменения в директории проекта pf-auth
как видите, github сделал для этого удобный и наглядный вебинтерфейс, дёшево и сердито

сгенерировать ssh ключ можно вот так
ssh-keygen
программа задаст несколько вопросов и спросит мастер пароль
этот мастер пароль используется демоном ключей, и защищает ваш ключ, если кто-то у вас скопировал файл id_rsa
если пароль не задан, то он тупо просто поимеет все ваши сервера

в общем стоит посмотреть на директорию ~/.ssh/ там несколько интересных и важных файлов

вот интерфейс добавления открытых ключей на гитхабе

в ubuntu есть утилита, для управления ключам

ну и собственно, как видите, это всё как то просто и примитивно, какой то файл, и тд., нужно копировать и посылать куда то

чтобы это облечить, созданы сервера публичных ключей
на этих серверах можно хранить свои открытые ключи и давать на них ссылку
этот механизм используется для подписывания пакетов Debian/Ubuntu и прочих пакетных дистрибутивов

например вот так, в убунту добавляется ключ,размещённый на внешнем сервере

sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-keys 9D1A0061

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

basmanov.breys.ru

Настройка SSH авторизации по ключам

В интернете полно инструкций о том, как настроить ssh авторизацию по ключам. Каждый раз, когда мне надо это сделать, я иду в поиск и делаю, так как забываю нюансы. В этот раз решил записать для себя и для всех остальных краткую инструкцию и небольшое дополнение от себя, которое нигде не встретил, по поводу логирования отпечатков ключей.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .

Введение

Пару слов о чем тут пойдет речь. Для подключения по ssh можно использовать связку логин-пароль, а можно логин-сертификат. В интернете всюду рассказывают о том, что сертификат это безопасно и надо обязательно использовать его для авторизации на сервере. Все, что не по сертификату — дурной тон и дилетантство. Я совершенно не разделяю это мнение и сам всегда использую связку логин-пароль, более того, я чаще всего захожу сразу под root. Я искренне не понимаю, зачем заходить под обычным пользователем и каждый раз вводить sudo и пароль. Я захожу на сервер для совершения административных действий и мне всегда нужны полные права. Что мне там делать под обычным пользователем ума не приложу.

За все время моей работы с серверами у меня никогда не было проблем, связанных с авторизацией по паролю, поэтому я считаю пустой тратой времени какие-то дополнительные действия в этом плане, если нет особой необходимости. Доводы о том, что пароль могут сбрутить выглядят несостоятельными. Пароль должен быть сложным, и брутить его никто не будет. Даже если будут, то есть fail2ban, который быстро отключит желающих побаловаться. Хотя я сомневаюсь, что сейчас кто-то занимается брутом ssh.

Уточню важный момент — все сказанное выше относится к ситуациям, когда я единственный администратор сервера и кроме меня на него больше никто не заходит. Если это не так, то тут уже возникают нюансы, в зависимости от ситуации, где нужно использовать сертификаты, разные учетные записи пользователей и sudo, к примеру, для логирования действий различных пользователей.

Об одном таком нюансе я и расскажу. Мне понадобилось настроить авторизацию ssh по сертификату. Причем авторизовываться будет сразу пользователь root. Заходить будут как по паролю, так и по сертификату. Мне необходимо вести учет того, кто по какому сертификату подключился по ssh к серверу.

Создание ssh ключей для putty

Для управления серверами я использую windows машину и ssh клиент putty. В составе программного комплекса putty есть утилита для генерации ключей — puttygen. Скачивайте ее по ссылке с официального сайта — https://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe. После запуска нажимайте на кнопку Generate и двигайте мышкой, пока не сформируется пара ключей — открытый и закрытый.

Key passphraseМожно задать пароль для приватного ключа. Ставить или нет на ваше усмотрение.
Save public keyКнопка сохранения публичного ключа. Он размещается на удаленном сервере.
Save private keyКнопка сохранения приватного ключа. Ключ хранится у клиента и используется для подключения к серверу.
SSH-2 RSA 2048Тип ключа и его длинна. Значения по-умолчанию подходят в полной мере для нашей задачи.

Формат ключей, которые создает puttygen не подходит для openssh, который стоит на сервере, поэтому содержимое открытого ключа в нужном формате копируем из окна puttygen. Я указал этот ключ стрелочкой на скриншоте. Именно это содержание пойдет на сервер. Сохраняйте ключ в формате openssh, а так же два других с помощью кнопок Save key.

Настройка ssh на сервере для авторизации по сертификатам

Здесь все просто. Во всех известных мне дистрибутивах авторизация по сертификатам уже настроена, нужно просто добавить этот сертификат на сервер. Сделаем это.

# mkdir ~/.ssh
# chmod 0700 ~/.ssh
# touch ~/.ssh/authorized_keys
# chmod 0644 ~/.ssh/authorized_keys

В файл authorized_keys вставляйте скопированный ключ из окна puttygen. Сохраняйте и подключайтесь с помощью сертификата. В putty сертификат нужно указать в разделе Connection -> SSH -> Auth.

Выбрать нужно приватный ключ, у которого расширение

.ppk. Напоминаю, что на сервер мы отправили публичный ключ. Этот ключ можно использовать на множестве серверов, так что нет необходимости для каждого сервера генерировать новую пару ключей. Везде можно использовать один и тот же.

Теперь можно подключаться, необходимости перезапускать службу ssh нет.

Логирование ssh подключений по сертификату

Мне необходимо знать, когда и какой сертификат подключался к серверу. По-умолчанию такой информации чаще всего в логах не остается. Исключение я заметил только в CentOS 7. Там с дефолтными настройками ssh и уровнем логирования INFO отображается отпечаток ключа в логе:

# cat /var/log/secure
Dec 4 21:32:40 server sshd[21379]: Accepted publickey for root from 10.1.3.221 port 56929 ssh3: RSA 
fa:7c:c6:6b:31:98:43:9f:ef:41:c5:49:80:c2:a8:16
Dec 4 21:32:41 server sshd[21379]: pam_unix(sshd:session): session opened for user root by (uid=0)

По отпечатку становится понятно, какой сертификат подключился. Для каждого сертификата отпечаток можно посмотреть в puttygen. В CentOS более ранних версий, в Ubuntu 12 и 14 в логах будет только такая информация:

# cat /var/log/auth.log
Dec 5 11:44:14 server sshd[9071]: Accepted publickey for root from 10.1.3.221 port 60170 ssh3
Dec 5 11:44:14 server sshd[9071]: pam_unix(sshd:session): session opened for user root by (uid=0)

Информации о самом ключе нет. Я так думаю, это зависит от версии OpenSSH. В первом случае 6-я версия, во втором 5-я. Специально я не проверял. Если у вас нет информации о ключе в лог файле, исправить это очень просто. В файле

/etc/ssh/sshd_config меняем параметр:

LogLevel VERBOSE

и перезапускаем службу:

# service ssh restart

Пробуем снова подключиться по ssh, используя сертификат, и проверяем лог:

Dec 5 11:43:17 server sshd[8746]: Connection from 10.1.3.221 port 60162
Dec 5 11:43:19 server sshd[8746]: Found matching RSA key: fa:7c:c6:6b:31:98:43:9f:ef:41:c5:49:80:c2:a8:16
Dec 5 11:43:19 server sshd[8746]: Postponed publickey for root from 10.1.3.221 port 60162 ssh3 [preauth]
Dec 5 11:43:19 server sshd[8746]: Found matching RSA key: fa:7c:c6:6b:31:98:43:9f:ef:41:c5:49:80:c2:a8:16
Dec 5 11:43:19 server sshd[8746]: Accepted publickey for root from 10.1.3.221 port 60162 ssh3
Dec 5 11:43:19 server sshd[8746]: pam_unix(sshd:session): session opened for user root by (uid=0)

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

Онлайн курс «Администратор Linux»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Помогла статья? Есть возможность отблагодарить автора

serveradmin.ru

Вход ssh по ключу ( Linux/Unix ) / FAQ / Howitmake.ru

Авторизация с использованием ключей — более удобный способ выполнять вход в систему, вы можете раскидать свой ключ на множество систем и выполнять вход на них без использования пароля, когда у вас много машин это становится невероятно удобным. Для тестов нам необходимо иметь минимум 2 машины, одна рабочая, на которой мы будем гереировать ключи и выполнять вход на удаленные машины, а вторая целевая, на которую будет выполняться вход в систему по ssh
Для того чтобы выполнить ssh авторизацию по ключу, необходимо выполнить 3 действия:
1) Сгенерировать ssh ключ закрытый ключ и сертификат ( открытый ключ )
2) Разрешить на удаленной машине выход по ключу
3) Положить на целевую машину открытый ключ

Для тестов используется имя пользователя: user

Создаем директорию для ключей
mkdir -p /home/user/.ssh
Генерируем ключи SSH
для этого существует утилита ssh-keygen
ssh-keygen -t rsa -b 1024 -f /home/user/.ssh/id_rsa

Где:
ssh-keygen -утилита для генерации ключа
-t
— ключ утилиты отвечающий за тип генерируемого ключа
rsa -тип ключа бывает rsa/dsa
-b -ключ через который указывается длина ключа в bit
1024 — длина ключа, для тестов хватит и 1024 для большей безопасности указываем 2048, более длинный ключ вызывает большою нагрузку на процессор шифровака/дешифровка данных
-f -параметр указывает куда положить ключ
/home/user/.ssh/id_dsa -путь куда положить ключ

В результате в директории /home/user/.ssh/ у нас появилось 2 файла:

id_rsa
id_rsa.pub

Файл с расширением .pub это открытый ключ, его мы забрасываем на сервер к которому будем подключаться по ssh,

файл id_rsa это закрытый ключ, его не сообщаете никому, по нему вы будете осуществлять вход.
Во время генерации ключа система предложит ввести пароль, но тогда придется вводить его каждый раз при входе на сервер, так повышается безопасность, но снижается удобство, это уже решать вам, для тестов, пароль не указываем нажимаем 2 раза enter

Настраиваем целевую машину
Настраиваем машину на которую будем выполнять вход по ключу, тут необходимо выполнить 3 действия:
1) Настроить SSH сервер
2) Создать директорию для ключей в домашней директории пользователя
3) Положить на машину открытый ключ
1 — Настраиваем SSH сервер
sudo nano /etc/ssh/sshd_config

В конфиге нас интересует строки, по умолчанию они закомментированы с них необходимо снять комментарии и перевести значения этих параметров в yes если это не сделано за вас:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys

В последней строке мы указываем системе где искать ключи пользователей, их можно класть где угодно, но искать их будет проще именно в домашней директории пользователя в директории .ssh
Нам необходимо применить настройки, перезапустив ssh сервер

sudo service ssh restart
2- Создаем директорию для ключей

в домашней директории пользователя создаем директорию
.ssh
mkdir /home/user/.ssh

Директория должна принадлежать пользователю который будет выполнять вход в систему по ssh
3 — Добавляем на целевую машину открытый ключ
В созданной директории .ssh нам необходимо создать файл с отрытым ключом
nano /home/user/.ssh/authorized_keys

Нам необходимо записать в него содержимое файла из id_rsa.pub который у нас получился при генерации ключей на рабочей машине
Права доступа к файлу authorized_keys должны позволять читать содержимое пользователю user
Проверяем работу
На рабочей машине, если мы работаем под именем user, пытаемся подключиться к целевой машине, набрав команду в консоли:
ssh ip__целевой_машины

Должно произойти подключение
Если на рабочей системе вы работаете под пользователем имя которого на целевой машине отличается от имени пользователя на рабочей машине, например:
Вы работаете под пользователем superuser, но на целевой машине вы работаете под пользователем user, тогда команда подключения будет иметь вид:
ssh user@ip__целевой_машины

Ну а если на целевой машине ssh сервер работает не на стандартном порту 22, а для примера, 9999, то команда подключения принимает вид:
ssh user@ip__целевой_машины -p 9999

На этом все!
Возникли вопросы, прошу в комментарии, нашли ошибку, то пишите в чилку или на email, его можно найти в нижнем левом углу страницы.

howitmake.ru

SSH авторизация по ключу

Настроив ssh авторизацию по ключу вы не только улучшите безопасность сервера, но и еще немного упростите себе жизнь. Вместо использования паролей, которые легко перехватить кейлоггером, в процессе ssh авторизации на сервере мы будем использовать RSA ключи. Для обеспечения хорошего уровня безопасности будет достаточно использовать длину ключа равной 2048 бит. Чтобы усложнить кражу, желательно хранить секретный ключ на зашифрованном разделе.

Если вы решили настроить на вашем сервере ssh авторизацию по ключу, первое, что необходимо сделать — это сгенерировать секретный и публичный RSA-ключи. Под Linux для генерации ключей я буду использовать ssh-keygen, для Windows есть утилита PuTTYgen. После генерации, публичный ключ копируется на сервер, а секретный ключ остается храниться на локальном компьютере.

Думаю, что с генерацией ключей в PuTTYgen проблем быть не должно. Запускаете программу, нажимаете Generate и потом начинаете беспорядочно водить курсор по экрану. Затем копируете публичный ключ из поля ‘Public key for pasting into OpenSSH authorized_keys file’ и жмете Save private key, чтобы сохранить публичный и приватный ключ.

Публичный ключ должен следующим образом:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEA98tvCKkB6hvDhA5XKuJjbcoly55n6toS+bXsZhPE2YYPqFm9wuqmTFTkqe/5LHGji0zB/60ifambCjJc5eL+ZyARIf6+c+2V1LGsBH07eA695LDOT3zhcIn5mxtgl1jqMc3ZtUUMQkpU494MHndWEssh9rbeJM1uGUl36ziUA8jUFtZmsKlVRtkD/syzWS3hqGQKNz4tk1yYWsCYYLUwYHd0uVZx5CNUu76G9dyiZ8F/c1I4xLjoOJKI+6d46cfNKHbRQZCygpAlEVWNKpavFZe2x8vpaDb/7LvK7MVcy0JgABzxTNz5F/h6x4nik4OivqQT4uECC3IVwKxTM1U2Nw== rsa-key-20160314

Скопируйте его в содержимое файла ~/.ssh/authorized_keys.

Для генерации пары ключей в Linux выполните команду:

ssh-keygen -t rsa -b 2048

Программа предложит указать каталог, в который будут будут сохранены файлы ключей и попросит ввести секретную фразу. Нажимаем Enter чтобы использовать параметры по умолчанию.

Если в предыдущем шаге вы не меняли настройки, программа сохранит ключи в каталог .ssh в домашней директории пользователя. Чтобы перейти в каталог с ключами выполните команду:

cd ~/.ssh

В каталоге лежат два файла: id_rsa — секретный ключ, id_rsa.pub — публичный ключ. Скопируйте в надежное место файл секретного ключа, а публичный ключ перенесите на сервер.

Заносим сгенерированный нами открытый ключ в авторизованные ключи сервера. Для этого скопируйте содержимое id_rsa.pub в конец файла authorized_keys:

cat id_rsa.pub >> ~/.ssh/authorized_keys

Настройте ssh авторизацию по ключу в конфиге OpenSSH сервера:

nano /etc/ssh/sshd_config

Приведите текущие настройки в соответствие параметрам ниже:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no

Чтобы отключить вход по паролю, изменяем значение параметра:

UseLogin no

Устанавливаем права:

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

Перезапустим ssh сервер для применения настроек.

service sshd restart

На этом настройка сервера закончена, далее переходим к настройке клиента.

Настройка ssh авторизации по ключу в Linux

Для ssh авторизации по ключу в Linux, создайте файл ~/.ssh/config и скопируйте в него строки ниже. Затем по аналогии укажите адрес сервера и расположение файла секретного ключа.

Host server.net
IdentityFile ~/.ssh/keys/id_rsa

Устанавливаем права на файл:

chmod 600 ~/.ssh/config

Чтобы зайти на сервер используя SSH авторизация по ключу, выполните команду:

ssh [email protected]

Если хотите вручную указать размещение ключа, выполните команду:

ssh -i ~/.ssh/id_rsa [email protected]

Настройка ssh авторизации по ключу в PuTTY

Для авторизации по ключу в PuTTY укажите расположение ключа в меню SSHAuth. Если ключ id_rsa сгенерирован в Linux, нужно перевести его в формат ppk с помощью утилиты PuTTYgen.

codebeer.ru

Безопасный протокол SSH настройка аутентификации по ключам

В нескольких предыдущих статьях данного раздела, мы более-менее раскрыли тему протокола SSH, настройку и использование SSH сервера и SSH клиента в операционной системе FreeBSD. В данной статье хотелось-бы рассказать об SSH аутентификации на основе пар ключей, заодно рассмотреть остальные программы из пакета программного обеспечения, протокола SSH, под FreeBSD. Итак, нужно это в первую очередь для удобства, при удаленном администрировании серверов, не нужно вводить пароль при каждом подключении, и в определенной степени более безопасно, нежели подключаться к удаленной машине только по паролю. Общий принцип для аутентификации на основе публичного ключа, в протоколе SSH, таков:
  • С помощью программы ssh-keygen, должна быть сгенерирована пара ключей, публичный ключ ( public key ) и приватный ключ ( private key )
  • Секретный ключ, всегда остается у клиента и никому никогда не показывается.
  • Публичный ключ копируется на удаленный SSH сервер ( говорим опять-же в контексте операционной системы FreeBSD ) и кладется в специальный файл, известный SSH серверу. По-умолчанию, для хранения публичных ключей, используется файл ~/.ssh/authorized_keys. Файл для хранения ключей назначается в файле конфигурации SSH сервера, директивой AuthorizedKeysFile
  • Клиент, отправляет SSH серверу свой публичный ключ и запрашивает аутентификацию по данному ключу.
  • Сервер проверяет файл ~/.ssh/authorized_keys, если такой ключ найден, SSH сервер отправляет клиенту сообщение, зашифрованное найденным публичным ключом пользователя.
  • Клиент должен расшифровать сообщение с помощью своего приватного ключа, если приватный ключ защищен паролем ( а так и должно быть всегда, в целях безопасности ), программа ssh, попросит пользователя ввести пароль, что-бы сначала расшифровать сам ключ.
  • Если сообщение расшифровано, правильность публичного и приватного, ключей, считается подтвержденной и пользователю предоставляется доступ в систему.
Весь процесс аутентификации можно посмотреть, с помощью опции -v ( verbose ), программы ssh, очень полезная штука, особенно на стадии настройки серверной и клиентской частей протокола SSH.

Генерация ключей с помощью программы ssh-keygen.

Для создания и управления ключами, предназначена программа ssh-keygen, так-же входящая в пакет программного обеспечения OpenSSH. Полный список опций можно как всегда посмотреть командой man ssh-keygen. Здесь приведу лишь несколько из них:
-t type
ssh-keygen, работает с тремя типами ключей. Возможные значения: RSA 1 — для протокола SSH версии 1. RSA — для протокола SSH версии 2. DSA — для протокола SSH версии 2.
-b
Длина ключа в битах. RSA — минимальная длина, 768 бит, длина ключа по-умолчанию, 2048 бит. DSA — длина 1024 бита.
-i
Данная опция используется для импорта ключей из одного формата ( например ключи сгенерированные программой PuTTYgen, для Windows ), в формат OpenSSH.
-l
Посмотреть отпечаток секретного ключа ( fingerprint ).
-p
Изменить секретную фразу приватного ключа.
Сгенерируем пару RSA ключей, это рекомендуемый формат, как наиболее устойчивый к взлому. По-умолчанию, ключи, сохраняются в домашнюю директорию пользователя, в файлы ~/.ssh/id_rsa — приватный ( секретный ) ключ, и ~/.ssh/id_rsa.pub — публичный ключ.
vds-admin /root# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Здесь предлагается ввести путь для сохранения файлов ключей. Имейте в виду, если просто указать свое имя файла, например: mynew_id_rsa, то ключи будут сохранены в корне домашней директории пользователя, в моем случае в директории /root, с именами: mynew_id_rsa и mynew_id_rsa.pub.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Здесь вас попросят ввести секретную фразу, настоятельно рекомендую делать это всегда. ) 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 root@vds-admin.
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|E                |
| .               |
|  o o ..         |
| . B +..So       |
|  o =.. o .      |
| . o. .o         |
|  =..+o          |
| o.+*o           |
+-----------------+
Вот собственно и все, сгенерирована пара ключей RSA, с длиной 4096 бит и сохранены в файлы /root/.ssh/id_rsa и /root/.ssh/id_rsa.pub.

Настройка SSH сервера на аутентификацию по открытому ключу.

SSH сервер естественно должен быть настроен на аутентификацию по ключам, приведу кусок, касающийся аутентификации, своего файла конфигурации, SSH сервера. Все что закомментировано в файле конфигурации SSH, отсюда убрал, для простоты восприятия:
PermitRootLogin yes Данная директива нужна, если вы планируете работать под учетной записью root. PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no UseLogin no
Теперь копируем публичный ключ на удаленный SSH сервер:
vds-admin /root/.ssh# cat id_rsa.pub | ssh 192.168.50.50 "cat >> ~/.ssh/authorized_keys"
Так как для копирования вы подключаетесь к SSH серверу, он запросит пароль, авторизацию по ключам-то мы еще не настроили. ) Я работал под учетной записью root, а без явного указания имени пользователя в командной строке или в конфигурационном файле SSH клиента, подключение происходит с именем текущего пользователя, то есть мне нужно было ввести пароль пользователя root, удаленной системы. После ввода пароля, публичный ключ будет добавлен в конец файла ~/.ssh/authorized_keys, так как мы подключаемся пользователем root, то путь ~/.ssh/authorized_keys указывает на директорию /root/.ssh/authorized_keys. Ключи сгенерированы и скопированы на SSH сервер, сервер соответствующим образом настроен, пробуем подключится:
vds-admin /root/.ssh# ssh 192.168.50.50
Enter passphrase for key '/root/.ssh/id_rsa':  Здесь вводим нашу секретную фразу, указанную при генерации ключей.
Если пароль на ключ введен верно, получаем доступ в удаленную систему.
Обратите внимание на следующий момент, с приведенным выше вариантом конфигурации SSH сервера, при неудачной аутентификации по ключам, например если неправильно ввести секретную фразу ключей, будет предложена аутентификация по паролю. Что-бы изменить это поведение и например вообще не пускать пользователя root иначе, как по ключам, можно изменить в конфигурационном файле сервера, значение директивы PermitRootLogin с yes на without-password.

Использование программы ssh-agent

Как было сказано выше, в целях безопасности, приватный ключ, всегда должен быть защищен секретной фразой ( паролем ), но это вызывает некоторые неудобства, вам придется вводить секретную фразу, каждый раз когда вы подключаетесь к удаленному серверу по ключу, было-бы гораздо проще ввести пароль на ключ один раз и пользоваться им сколько потребуется. На этот случай в пакете OpenSSH, существуют специальные программы ssh-agent и ssh-add, в общем-то вторая является дополнением первой. Как это работает. Поле запуска программы ssh-agent, в нее добавляются расшифрованные ключи, то есть при добавлении она запросит секретную фразу ключа, для его дешифровки, и далее ssh-agent, будет выдавать уже расшифрованные ключи по запросу, например программе SSH. Запускать ssh-agent, можно двумя способами, со специальной опцией, говорящей, какой тип оболочки используется, или с помощью команды eval. Принципиальной разницы как его запускать, нет, просто в случае с опцией, вы должны точно знать, какую оболочку вы используете.
ssh-agent -c
Если в качестве оболочки используется С — Shell
ssh-agent -s
Если в качестве оболочки используется Bourne Shell
eval `ssh-agent`
В таком варианте запущенный ssh-agent, будет передан команде eval, которая выполнит его в текущей оболочке. Обратите внимание, используются обратные кавычки а не обычные !
Итак, запускаем ssh-agent:
vds-admin /root/.ssh# eval `ssh-agent`
Agent pid 1982
При запуске, ssh-agent создает переменные окружения, проверим какие:
vds-admin /root/.ssh# env | grep SSH_A
SSH_AUTH_SOCK=/tmp/ssh-7EeitdI5mr/agent.1981 
В этой переменной хранится сокет, через который программа ssh, будет связываться с ssh-agent.
SSH_AGENT_PID=1982
Это PID процесса ssh-agent
Теперь нужно поместить в него расшифрованные ключи, делается это с помощью программы ssh-add. Если запустить ее без аргументов, будут добавлены все ключи, найденные в стандартных местах их обитания, то есть будут просканированы следующие файлы, ~/.ssh/identify, ~/.ssh/id_rsa и /.ssh/id_dsa. Если ключ защищен парольной фразой, программа попросит ввести ее, что-бы расшифровать ключ и загрузить уже готовый к применению.
vds-admin /root/.ssh# ssh-add
Enter passphrase for /root/.ssh/id_rsa: Запрос пароля на расшифровку
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
Теперь пробуем подключиться к удаленному SSH серверу:
vds-admin /root/.ssh# ssh 192.168.50.50
Last login: Tue Jul 7 18:45:27 2009 from .host.
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.

FreeBSD 7.1-STABLE (SMP_KERNEL) #1: Tue Mar 10 18:14:59 UTC 2009

Welcome to FreeBSD!
Как видите пароль у нас больше никто не спрашивает, программа SSH, получает уже расшифрованный ключ от ssh-agent и мы успешно подключаемся к удаленному SSH серверу. Посмотреть отпечатки загруженных в ssh-agent ключей, можно той-же командой ssh-add с опцией -l, или целиком ключи, опцией -L.
vds-admin /root/.ssh# ssh-add -l
4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA)
vds-admin /root/.ssh# ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEArL0hIMmhw8rXeg0p72+EJXnC4iAY2XTkPAdTb3LnQb9bc0E5wvd
cwCdNEtLlDIDCH+z0I1FaP3TfpvgVkv59X15TaNIeoB7uydqXvlLMOxpOJkfbc3eiA6a07PvZHMKXcIA0ZZ9+j12u
l+HsGOK2qMQ5g52mOc6BOF1PVuoHfTR1C9nExv5UCA6h7e/v2wxq79pMW07nx7nshB5/1n5Gnyx+toQEzRiFbf
zOJBB1ry/9NUF1DiBwOhKJVdEJBTUi0hyh/e77UAmVtkguEtjrsDEdxJ31sV21SL97EZHymMjRPjwU2nWjRkHf0Pi7
dlXBoCKRj3dQps38kwFd3m9Tu4+hXSnsF8FdxkX5y9XmN8Uz8UWR6O2zslr7xZubkDR3aCq1dtcbu2nkvC4+Vy
TOxEdnaNqDlC6U6G6aUVKFc0Rb5dcPnqpKqUHWE8MlXq/obKMRjuSz+GOr1VgRe/wZM7/0GoO1Xrv2MDMhS+
S1uR+XkHkQr/EjTSxPiDZ92snZhtiyPIzTUZDOmclWHbe4gyvxDtU3Lxqzl3t1+Murg4sN1NrkZIHefMq2xeCOS8P
bI89b3zJG2PJ3i2PSsOMviqIBOL3BBskGSWksJKi/YvvKwrlKaSM10wMZTbXHomgu+6jRd7cZtUOmU/FO0IoKejB
MwuYbcPC+TCWBks0phU= /root/.ssh/id_rsa
Загружен один ключ, по которому мы подключались к удаленной машине. Кроме этого, при запуске ssh-add, можно указать путь до конкретного ключа, который необходимо загрузить, например:
vds-admin /root/.ssh# ssh-add /root/.ssh/id_rsa.new1
Enter passphrase for /root/.ssh/id_rsa.new1:
Identity added: /root/.ssh/id_rsa.new1 (/root/.ssh/id_rsa.new1)

Проверяем, что у нас теперь в ssh-agent:
vds-admin /root/.ssh# ssh-add -l
4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA)
2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 /root/.ssh/id_rsa.new1 (RSA)
Загружено уже 2 ключа
Удаляются ключи из ssh-agent, так-же просто как и добавляются, для этого используется опция -d, без параметров, для удаления стандартных ключей, опция -d файл_ключа, если нужно удалить конкретный ключ, или опция -D, для удаления всех ключей, например:
vds-admin /root/.ssh# ssh-add -l
4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA)
2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA)
2048 c7:9f:b1:3b:c1:d0:61:15:38:27:d1:36:a7:49:55:cd id_rsa.new2 (RSA)

vds-admin /root/.ssh# ssh-add -d id_rsa.new2
Identity removed: id_rsa.new2 (id_rsa.new2.pub)

vds-admin /root/.ssh# ssh-add -l
4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA)
2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA)

vds-admin /root/.ssh# ssh-add -D
All identities removed.

vds-admin /root/.ssh# ssh-add -l
The agent has no identities.
Приведу список самых используемых опций программы ssh-add:
ssh-add
Без опций, добавляются стандартные ключи
ssh-add имя файла
Добавляются конкретный ключ
-l
Показывает отпечатки всех загруженных в данный момент ключей
-L
Посмотреть список самих ключей
-D
Из ssh-agent, будут удалены все ключи
-d имя файла
Удаляет конкретный ключ
-t
Установить время жизни ключей, через данный промежуток времени ключи будут выгружены.
-x
Заблокировать ssh-agent паролем
-X
Разблокировать ssh-agent
Что-бы закрыть ssh-agent, можно вызвать его c опцией -k, ну или на крайний случай прибить сигналом, например kill -QUIT PID, но это крайняя мера и при корректном запуске, это не потребуется:
vds-admin /root/.ssh# ssh-agent -k
unsetenv SSH_AUTH_SOCK;
unsetenv SSH_AGENT_PID;
echo Agent pid 1982 killed;
Как видите произошел обратный процесс, переменные очищены, процесс убит.

Форвардинг ssh-agent

Форвардинг агента включается в файле конфигурации клиента SSH, директивой ForwardAgent yes. Как это работает. Вы запускаете ssh-agent на локальной машине, загружаете ключи, подключаетесь к удаленному SSH серверу, сервер создает обратное перенаправление через созданный SSH туннель к вашему ssh-agent и вы можете использовать загруженные в него ключи для последующих соединений. Для примера, с локального хоста, Local_host, подключаемся к удаленной машине Remote_host, по каким-то причинам, нам понадобилось что-то посмотреть на еще одном хосте, Next_remote_host, что происходит в таком случае:
  • Клиент ssh c Local_host, подключается к SSH серверу, Remote_host, и запрашивает форвардинг для ssh-agent
  • Сервер SSH, /usr/sbin/sshd, хоста Remote_host, создает сокет в /tmp/ssh-XXXXXXX/agent.##### и устанавливает переменную окружения SSH_AUTH_SOCK, присваивая ей путь к сокету.
  • Когда нам понадобится подключиться к следующему серверу, ( мы сейчас на сервере Remote_host ), SSH клиент хоста Remote_host, обращается по пути, лежащему в переменной SSH_AUTH_SOCK, то есть к сокету.
  • SSH сервер, находящийся на другом конце сокета /tmp/ssh-XXXXXXX/agent.#####, передает данные из ssh, сервера Remote_host, на ssh-agent, запущенный на хосте Local_host. Вся работа с ключами происходит на машине Local_host а не на машинах, на которых вы регистрируетесь в процессе работы.
  • Теперь с хоста Remote_host, вы можете подключиться к хосту Next_remote_host, используя ключи, загруженные в ssh-agent, на хосте Local_host.
Это только на первый взгляд сложно выглядит, вся эта схема работает абсолютно прозрачно для пользователя, от него требуется только соответствующим образом настроить /etc/ssh/ssh_config а дплее все просто. Собственно тут даже показывать нечего в качестве примера.

Программа PuTTy, клиент SSH под Windows.

Все о чем было рассказано выше, говорилось и делалось в контексте операционной системы FreeBSD, теперь пару слов о клиентах под Windows. Самым популярным, и на мой взгляд, самым функциональным и удобным клиентом под операционные системы Windows, является программный пакет PuTTy. В него входят следующие утилиты:
  • putty.exe — Программа, SSH, Telnet, Rlogin клиент;
  • puttygen.exe — Утилита для генерации и конвертации ключей;
  • pageant.exe — Аналог программы ssh-agent;
  • plink.exe — Клиент SSH, Telnet и Rlogin для командной строки;
  • pscp.exe — Программа командной строки для безопасного копирования SCP/SFTP
  • psftp.exe — Интерактивный SFTP клиент для командной строки;
Не думаю что у вас возникнут трудности при использовании данной программы, тем не менее, всегда можно нажать кнопку Help ).

vds-admin.ru

Авторизация SSH по ключу в Linux

SSH авторизация по ключу — наиболее безопасный способ авторизации, значительно превосходящий по безопасности обычный метод авторизации по паролю. В этой небольшой статье, мы разберем, как реализовать авторизацию по SSH ключу на удаленном сервере под управлением операционной системы семейства Linux.

Содержимое статьи:

Генерация ключа в Linux

Генерация ключа запускается следующей командой:

ssh-keygen -t rsa -b 2048

-t rsa — тип шифрования;
-b 2048 — длина ключа;

если нужно сгенерировать ключ под другого пользователя, то необходимо воспользоваться командой su:

su ЛОГИН

очевидно, ЛОГИН необходимо заменить на имя нужного пользователя.

И уже затем воспользоваться командой для генерации ключей.

При генерации ключа вам будет задано несколько вопросов:

Enter file in which to save the key (/home/user/.ssh/id_rsa) — если нет необходимости сохранять в другое место сгенерированные файлы ключей, то оставляем без ответа;
Enter passphrase (empty for no passphrase): — если хотим защитить наш файл ключа паролем (пароль именно на клиентский ключ!), если же хотим сделать файл ключа без пароля, то оставляем без ответа. ВАЖНО — ВОССТАНОВИТЬ ЗАБЫТЫЙ ПАРОЛЬ НЕВОЗМОЖНО;
Enter same passphrase again: — повторяем пароль;

После конца генерации, появляется два ключа:

Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.


id_rsa — приватный ключ пользователя;
id_rsa.pub — публичный ключ сервера;

В файле /etc/ssh/sshd_config проверяем:

Разрешаем использование RSA ключей:

RSAAuthentication yes

Разрешаем авторизацию при помощи ключей:

PubkeyAuthentication yes

Путь где будут находиться ключи, с которыми можно соединяться:

AuthorizedKeysFile    %h/.ssh/authorized_keys

Потом идем в директорию пользователя:

cd ~/.ssh/

и записываем авторизованные ключи

cat id_rsa.pub >> authorized_keys

Копируем себе файл id_rsa, и удаляем его на сервере. Так же удаляем и id_rsa.pub.

Авторизация из Windows

Теперь для авторизации в Windows с помощью ключа, скопированного ранее с сервера, нужно воспользоваться утилитой PuTTYGen (идет в комплекте с PuTTY), которая сконвертирует ключ в понятный PuTTY формат.

Conversion — Import key

puttygen1

При желании можем написать комментарий в поле «Key comment«, а так же добавить пароль, написав его в «Key passphrase«.
Далее жмем «Save private key«.

puttygen2

Для авторизации по ключу, в PuTTY/KiTTY нужно проделать следующее:

Connection — data — autologin username = имя пользователя

kitty1

Connection — data — ssh — auth — указываем файл ключа

kitty2

Если соединение с ssh сервером проходит успешно, то следует отключить возможность захода с помощью авторизации по логину/паролю. В конфиге /etc/ssh/sshd_config меняем значение параметров «PasswordAuthentication» и «PermitEmptyPasswords» на «no«

PasswordAuthentication no
PermitEmptyPasswords no

Перезапускаем службу

/etc/init.d/ssh restart


sysadmin.ru

SSH: генерация ключа

В этой записи, я расскажу как создать новый SSH ключ и вкратце расскажу для чего он нужен, чтобы вы понимали почему такие сервисы как Bitbucket, Github и многие другие спрашивают их у вас. 

Что такое SSH и для чего нужны ключи?

SSH — это аббревиатура для Secure Shell, используется для удаленного управления Linux сервером (запускать консольный команды и т.д.).

По старинке вы можете постоянно указывать пароль при подключении к удаленному серверу, но это не безопасно, так как пароль может быть перехвачен. Для таких случаем были придумали публичные и приватный ключи — их можете сгенерировать используя ssh-keygen.

После генерации ключа вы получаете две версии — публичная и приватная.

  • Публичным ключом вы можете делиться с сервисами (например, Bitbucket, GitHib и др.), которые от вас их требует.
  • Приватный всегда остается у вас. Никогда не делитесь этим ключом, так как это тоже самое, что если бы я у вас спросил пароль от вашего VK аккаунта и если у кого-то он будет, то они могут зайти везде где вы используете публичный ключ. Допустим, если вы указали публичный ключ на Bitbucket, то используя ваш приватный ключ, я могу зайти по SSH и делать не очень приятный для вас вещи, по типу управления файлами вашего проекта и аккаунта. Я не думаю, что вы этого действительно хотите.

Подробнее о генерации ключей читайте ниже.

Генерация ключа

  • Откройте терминал
  • Впишите команду ниже, чтобы создать новый SSH ключ и «Мой ключ» как лейбл, чтобы в будущем вам было проще запомнить от чего этот ключ.
$ cd ~/.ssh && ssh-keygen -t rsa -b 4096 -C "Мой ключ"

Если у вас выдает ошибку, попробуйте сначала создать .ssh директорию следующей командой — mkdir ~/.ssh/ и потом снова повторить команду выше. Если ошибка все равно есть, опишите её в комментариях ниже, я постараюсь вам помочь.

  • Далее вам должно вывестись:
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/<ваш_пользователь>/.ssh/id_rsa):

    Где id_rsa — это стандартной название файла ключа, вы можете указать mykey.

  • На вопрос о «Enter passphrase (empty for no passphrase):» (с англ. введите фразу, оставьте пустым, если не хотите ничего указывать), нажмите Enter, чтобы пропустить этот этап, он не такой важный. У вас так же спросит о повторении «фразы», тут тоже нажмите Enter.
  • В конце у вас должно вывести, что-то похоже на это:
    Your identification has been saved in mykey.
    Your public key has been saved in mykey.pub.
    The key fingerprint is:
    d9:e7:33:6b:c1:46:11:3a:f6:ca:d3:5f:b7:47:39:11 Мой ключ
    The key's randomart image is:
    +--[ RSA 4096]----+
    |            ..   |
    |           ..    |
    |          +  ..  |
    |         + o.E . |
    |        S .oo   .|
    |         . =+  o.|
    |          +.=. .=|
    |           ..= .+|
    |           .. .o.|
    +-----------------+

    Это означает, что публичный (mykey.pub) и приватный ключ (mykey) были созданы.

    Вы никогда и никому не должны предоставлять свой приватный ключ, он должен быть только у вас. Публичный ключ — это как раз то, чем вы делитесь, чтобы они понимали, что вы — это вы.

Где хранятся ключи?

По умолчания для этого есть специальная скрытая папка .ssh, которую можно найти тут: /home/<ваш_пользователь>/.ssh/. Если ее нет, значит раньше вы еще не создавали ключи.

Лучше всего хранить ключи именно в этой папке, чтобы потом не забывать их местонахождение.

Тем самым, когда мы создаете новый ключ, лучше сначала перейти в .ssh директорию:

$ cd ~/.ssh

И уже потом генерировать ключи.

Как получить содержимое ключа через консоль?

Очень просто, используй команду cat для этого:

$ cat mykey.pub

Где mykey.pub — это название файла. Файл может быть почти любого формата.

Пример ответа будет следующий:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCr6XoQqS6ZfpHx3IweEoRQgV/9nCzkfdS5fdatzPQeOLcC/jdSFXu0ctbudbWzLWbUmrzCScnLXIdzuz7lDN7HLaSCbVnvmp+b4Xe2Y8EgiXzHwCqnDB7yQHxMo6KFqK3PDYHhwQu+wMo8ofXhfdiClvL6HHplDCR1/Rzs2UpmUJpPRRerOqghJP213DNj/ujH6CzuR96FfGOdrlT0uTqcREpUPOKYNsb+kp6WyC6z7IUDzYYEzwjdGngITGKVTC2iN+BCe2LYe2liNT2ZBsY+6CYTyPlW4Ok7ku8acDUSQy0U7Z0BpYaOmq1h2CYa4mVo/GG7xY2zgrZXz7nzdFJ1 mykey

bologer.ru

Обновлено: 18.04.2019 — 09:11

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *