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 -i ~/.ssh/id_rsa [email protected]
Настройка ssh авторизации по ключу в PuTTY
Для авторизации по ключу в PuTTY укажите расположение ключа в меню SSH — Auth. Если ключ id_rsa сгенерирован в Linux, нужно перевести его в формат ppk с помощью утилиты PuTTYgen.
Источник: https://codebeer.ru/ssh-avtorizaciya-po-klyuchu/
Авторизация по ключу SSH
SSH или Secure Shell – это зашифрованный протокол, который часто используется для взаимодействия и удаленного управления серверами. Если вы захотите что-либо сделать на удаленном сервере, скорее всего, вам придется воспользоваться SSH и работать через терминал.
В SSH существует несколько способов авторизации. Вы можете каждый раз вводить пароль пользователя или использовать более безопасный и надежный способ – ключи SSH. Что самое интересное, он более удобен для применения, вам даже не нужно будет вводить пароль. В этой статье мы рассмотрим как настраивается авторизация по ключу SSH.
Как работают ключи SSH?
SSH сервер может выполнять аутентификацию пользователей с помощью различных алгоритмов. Самый популярный – это аутентификация по паролю. Он достаточно прост, но не очень безопасный.
Пароли передаются по безопасному каналу, но они недостаточно сложны для противостояния попыткам перебора. Вычислительная мощность современных систем в сочетании со специальными скриптами делают перебор очень простым.
Конечно, существуют другие способы дополнительной безопасности, например, fail2ban, но аутентификация по ключу SSH более надежна.
Каждая пара ключей состоит из открытого и закрытого ключа. Секретный ключ сохраняется на стороне клиента и не должен быть доступен кому-либо еще. Утечка ключа позволит злоумышленнику войти на сервер, если не была настроена дополнительная аутентификация по паролю.
Открытый ключ используется для шифрования сообщений, которые можно расшифровать только закрытым ключом. Это свойство и используется для аутентификации с помощью пары ключей. Открытый ключ загружается на удаленный сервер, к которому необходимо получить доступ. Его нужно добавить в специальный файл ~/.ssh/authorized_keys.
Когда клиент попытается выполнить проверку подлинности через этот ключ, сервер отправит сообщение, зашифрованное с помощью открытого ключа, если клиент сможет его расшифровать и вернуть правильный ответ – аутентификация пройдена.
Как создать ключи SSH?
Сначала необходимо создать ключи ssh для аутентификации на локальном сервере. Для этого существует специальная утилита ssh-keygen, которая входит в набор утилит OpenSSH. По умолчанию она создает пару 2048 битных RSA ключей, которая подойдет не только для SSH, но и для большинства других ситуаций.
И так, генерация ключей ssh выполняется командой:
ssh-keygen
Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке ~/.ssh/. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa, а публичный id_rsa.pub.
Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Его можно не указывать, если не хотите. Использование дополнительного шифрования имеет только один минус – необходимость вводить пароль, и несколько преимуществ:
- Пароль никогда не попадет в сеть, он используется только на локальной машине для расшифровки ключа. Это значит что перебор по паролю больше невозможен.
- Секретный ключ хранится в закрытом каталоге и у клиента ssh нет к нему доступа пока вы не введете пароль;
- Если злоумышленник хочет взломать аутентификацию по ключу SSH, ему понадобится доступ к вашей системе. И даже тогда ключевая фраза может стать серьезной помехой на его пути.
Но все же, это необязательное дополнение и если не хотите, то вы можете просто нажать Enter. Тогда доступ по ключу ssh будет выполняться автоматически и вам не нужно будет что-либо вводить.
Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере.
Загрузка ключа на сервер
Когда генерация ключей завершена, нам осталось только загрузить ключ на сервер. Для загрузки ключа можно использовать несколько способов. В некоторых случаях вы можете указать ключ в панели управления сервером, например, сPanel или любой другой. Но мы такой способ рассматривать не будем. Мы рассмотрим ручные способы.
Самый простой способ скопировать ключ на удаленный сервер – это использовать утилиту ssh-copy-id. Она тоже входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH. Синтаксис команды:
ssh-copy-id username@remote_host
При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id.rsa.pub для загрузки его на сервер в файл ~/.ssh/authorized_keys. Дальше вы можете выполнять аутентификацию с помощью этого ключа.
Если такой способ по какой-либо причине для вас не работает, вы можете скопировать ключ по ssh вручную. Мы создадим каталог ~/.ssh, а затем поместим наш ключ в файл authorized_keys с помощью символа >>, это позволит не перезаписывать существующие ключи:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host “mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”
Здесь вам тоже нужно набрать yes, если вы подключаетесь к новому серверу, а затем ввести пароль. Теперь вы можете использовать созданный ключ для аутентификации на сервере:
ssh username@remote_host
Если вы не захотели создать ssh ключ с доступом по паролю, то вы сразу же будете авторизованы, что очень удобно. Иначе, сначала вам придется ввести фразу-пароль для расшифровки ключа.
Отключение проверки пароля
Если пароль больше не будет использоваться, то для увеличения безопасности системы лучше его вовсе отключить. Но убедитесь, что ключ надежно сохранен и вы его не потеряете, потому что по паролю вы больше не войдете. Авторизуйтесь на сервере, затем откройте конфигурационный файл /etc/ssh/sshd_config и найдите там директиву PasswordAuthenticatin. Нужно установить ее значение в No:
sudo vi /etc/ssh/sshd_config
PasswordAuthentication no
Теперь сохраните файл и перезапустите службу ssh:
sudo service ssh restart
Дальше будет возможно только подключение по ключу ssh, пароль не будет приниматься.
Выводы
В этой статье мы рассмотрели как выполняется авторизация по ключу ssh, настройка ключей ssh и добавить ssh ключ. Теперь вы можете войти на сервер без ввода пароля. Если у вас остались вопросы, спрашивайте в комментариях!
Источник: https://losst.ru/avtorizatsiya-po-klyuchu-ssh
SSH, аутентификация по ключам, ssh-keygen, ssh-agent
В нескольких предыдущих статьях данного раздела, мы более-менее раскрыли тему протокола 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 typessh-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, отсюда убрал, для простоты восприятия:
Теперь копируем публичный ключ на удаленный 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-agent
Как было сказано выше, в целях безопасности, приватный ключ, всегда должен быть защищен секретной фразой ( паролем ), но это вызывает некоторые неудобства, вам придется вводить секретную фразу, каждый раз когда вы подключаетесь к удаленному серверу по ключу, было-бы гораздо проще ввести пароль на ключ один раз и пользоваться им сколько потребуется. На этот случай в пакете OpenSSH, существуют специальные программы ssh-agent и ssh-add, в общем-то вторая является дополнением первой.
Как это работает. Поле запуска программы ssh-agent, в нее добавляются расшифрованные ключи, то есть при добавлении она запросит секретную фразу ключа, для его дешифровки, и далее ssh-agent, будет выдавать уже расшифрованные ключи по запросу, например программе SSH.
Запускать ssh-agent, можно двумя способами, со специальной опцией, говорящей, какой тип оболочки используется, или с помощью команды eval. Принципиальной разницы как его запускать, нет, просто в случае с опцией, вы должны точно знать, какую оболочку вы используете.
ssh-agent -cЕсли в качестве оболочки используется С – Shellssh-agent -sЕсли в качестве оболочки используется Bourne Shelleval `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 ).
Источник: https://vds-admin.ru/ssh/ssh-autentifikatsiya-po-klyucham-ispolzovanie-programm-ssh-keygen-i-ssh-agent
Авторизация SSH по ключу в 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 с помощью ключа, скопированного ранее с сервера, нужно воспользоваться утилитой PuTTYGen (идет в комплекте с PuTTY), которая сконвертирует ключ в понятный PuTTY формат.
Conversion – Import key
При желании можем написать комментарий в поле “Key comment”, а так же добавить пароль, написав его в “Key passphrase”.
Далее жмем “Save private key”.
Для авторизации по ключу, в PuTTY/KiTTY нужно проделать следующее:
Connection – data – autologin username = имя пользователя
Connection – data – ssh – auth – указываем файл ключа
Если соединение с ssh сервером проходит успешно, то следует отключить возможность захода с помощью авторизации по логину/паролю. В конфиге /etc/ssh/sshd_config меняем значение параметров “PasswordAuthentication” и “PermitEmptyPasswords” на “no”
PasswordAuthentication no PermitEmptyPasswords no
Перезапускаем службу
/etc/init.d/ssh restart
Источник: https://sysadmin.ru/articles/avtorizaciya-ssh-po-klyuchu-v-linux
Настройка SSH аутентификации по ключам в Linux
В интернете полно инструкций как настроить SSH аутентификацию по ключам на сервере Linux. Но каждый раз при настройке мне приходится искать их заново, потому что некоторые нюансы я забываю. Поэтому оставлю тут эту инструкцию в первую очередь для себя и добавлю полезную информацию о журналах отпечатков (fingerprint) ключей, которая нигде не встречается.
Итак, чтобы подключится к *Nix хосту через SSH, нужно предоставить серверу пару: логин + пароль, или логин + ключ. Настройка SSH аутентификации по ключам не только повышает уровень защищенности сервера, но и упрощает жизнь администратору за счет более удобного подключения к серверу.
Вместо использования пароля, который может быть перехвачен кейлогером или подсмотрен, мы будет использовать ключи RSA. Для обеспечения достаточного уровня безопасности будем использовать длину ключа 2048 бит.
Желательно хранить закрытый ключ на зашифрованном разделе (Bitlocker, EFS), тем самым вы защититесь от кражи закрытого файла с ключом.
Создание SSH ключей для Putty
Для подключения к серверам Linux из Windows я предпочитаю использовать старый-добрый клиент PuTTy. В состав пакета поставки putty входит небольшая утилита puttygen, которая может быть использована для генерации RSA и DSA ключей.
Скачайте утилиту с официального сайта https://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe и запустите ее. В окне PuTTy Key Generator нажмите кнопку Generate и произвольно подвигайте мышкой для создания некой рандомной последовательности.
Утилита сгенерирует пару ключей: открытый и закрытый.
Нам интересны следующие возможности интерфейса
Key passphrase | Здесь можно указать пароль для защиты закрытого ключа |
Save public key | Кнопка для сохранения открытого ключа в файл, который нужно будет поместить на удаленный сервер |
Save private key | Кнопка для сохранения закрытого ключа Файл с закрытым ключом должен храниться на клиенте (желательно защищённом) и будет использоваться для подключения к удаленному серверу. |
SSH-2 RSA 2048 | Указывается тип ключа и его длина. В нашем примере достаточно будет выбрать SSH-2 RSA. |
Формат файла ключа, который генерирует утилита puttygen напрямую не подходит для openssh, который запушен на моем сервере.
Поэтому мне придется скопировать в буфер значение открытого ключа из окна puttygen в буфер обмена (я выделил его на скриншоте выше). Этот код нужно будет поместить в файл на сервере.
Но также сохраните открытый и закрытый ключи в 2 файла с помощью соответствующих кнопок.
Настройка SSH на Linux для аутентификации с помощью ключей
В большинстве дистрибутивов Linux уже настроена поддержка аутентфикации с помощью сертификатов. Откройте конфигурационной файл сервера SSH (/etc/ssh/sshd_config) и раскомментируйте или добавьте следующие стройки:
HostKey /etc/ssh/ssh_host_dsa_key PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Перезапустите SSH командой:
# /etc/init.d/sshd restart
Затем создадим файл с ключом на сервере:
# mkdir ~/.ssh # chmod 0700 ~/.ssh # touch ~/.ssh/authorized_keys
# chmod 0644 ~/.ssh/authorized_keys
В файл authorized_keys нужно вставить ключ, скопированный из окна puttygen и сохранить его.
Затем на стороне клиента откройте Putty и перейдите в раздел Connection -> SSH -> Auth. Нажмите кнопку Browse и укажите путь к закрытому ключу, который вы сохранили ранее (расширение.ppk)
Открытый ключ, который вы сохранили на сервер, может быть использован для аутентификации на множестве серверов. Т.е. для каждого нового сервера не нужно генерировать новую пару ключей.
Теперь можно подключиться к серверу (нет необходимости перезапускать демона sshd).
Укажем только имя пользователя (в нашем случае это root).
Наличие строки « Authenticating with public key «rsa-key-20161208″» говорит о том, что вы успешно аутентифицировались с помощью ключа RSA.
Журнал подключений по SSH с помощью ключей
Как правило, администратор должен знать, когда и какой ключ или сертификат использовался для подключения к серверу. Однако, в большинстве дистрибутивов эта информация в журналах не отображается. Однако, к примеру, в CentOS 7 со стандартными настройками и уровнем журналирования INFO, отпечатки ключей сохраняются в журнал (# cat /var/log/secure).
В том случае, если в вашем журнале нет этой информации, исправить это не сложно. Отредактируйте конфигурационный файл /etc/ssh/sshd_config, изменив уровень журналирования:
LogLevel VERBOSE
И перезапустите sshd:
# /etc/init.d/sshd restart
Попробуйте еще раз подключится к серверу по SSH с помощью ключа и проверьте журнал:
# cat /var/log/secure
May 20 12:23:17 server sshd[8746]: Connection from 192.168.10.15 port 60162
May 20 12:23:19 server sshd[8746]: Found matching RSA key: 5b:7b:2a:14:29:11:bf:3a:8f:bd:24:99:21:34:cd:e6 May 20 12:23:19 server sshd[8746]: Postponed publickey for root from 192.168.10.
15 port 60162 ssh2 [preauth] May 20 12:23:19 server sshd[8746]: Found matching RSA key: 5b:7b:2a:14:29:11:bf:3a:8f:bd:24:99:21:34:cd:e6 May 20 12:23:19 server sshd[8746]: Accepted publickey for root from 192.168.10.
15 port 60162 ssh2
May 20 12:23:19 server sshd[8746]: pam_unix(sshd:session): session opened for user root by (uid=0)
Как видите, теперь в журнале отображается отпечаток ключа, позволяющий идентифицировать пользователя.
Источник: https://vmblog.ru/nastrojka-ssh-autentifikacii-po-klyucham-v-linux/
Как создать ключ для авторизации по SSH и добавить его на сервер?
SSH-ключи используются для идентификации клиента при подключении к серверу по SSH-протоколу. Используйте этот способ вместо аутентификации по паролю.
SSH-ключи представляют собой пару — закрытый и открытый ключ. Закрытый должен храниться в закрытом доступе у клиента, открытый отправляется на сервер и размещается в файле authorized_keys.
Создание SSH-ключей в Linux на примере CentOS
На клиентской стороне должен быть установлен пакет ssh (openssh). На серверах FirstVDS с шаблонами по умолчанию необходимое ПО уже установлено.
yum -y install openssh-server openssh-clients
На клиентском компьютере в командной строке выполните команду генерации ключей:
ssh-keygen
Введите путь файла, в который будут помещены ключи. Каталог по умолчанию указан в скобках, в примере /домашний_каталог/.ssh/id_rsa. Если хотите оставить расположение по умолчанию, нажмите Enter.
Пароль (passphrase) используется для ограничения доступа к закрытому ключу. Пароль усложнит использование ключа третьими лицами в случае утраты. Если не хотите использовать секретную фразу, нажмите Enter без заполнения строки.
Успешно сгенерировав пару ключей, вы увидите уведомление:
Открытый ключ хранится в файле /домашний_каталог/.ssh/id_rsa.pub, закрытый — /домашний_каталог/.ssh/id_rsa.
Скопируйте открытый ключ на сервер в файл /домашний_каталог/.ssh/authorized_key. Одной строкой:
cat ~/.ssh/id_rsa.pub | ssh root@ip-адрес-сервера %22cat >> ~/.ssh/authorized_keys%22
Или откройте этот файл на сервере редактором vi и вставьте строку с открытым ключом после ssh-rsa.
Ещё один способ скопировать ключ в authorized_keys — команда echo, которая помещает строку в конец файла.
echo ssh-rsa строка-публичного-ключа >> /root/.ssh/authorized_keys
Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.
Создание SSH-ключей на Windows с PuTTYgen
Если вы используете ОС Windows, то подключиться по SSH к вашему (Linux) серверу можно через PuTTY или OpenSSH. Генерация ключей в этом случае выполняется также при помощи этих программ. В примере мы используем клиент PuTTY.
Запустите приложение PuTTYgen, которое устанавливается вместе с PuTTY.
Выберите тип ключа SSH2-RSA и нажмите Generate.
В процессе генерации ключей несколько раз произвольно проведите мышкой по экрану приложения для создания случайных величин, используемых для ключей.
После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи нажмите Save public key и Save private key. Укажите расположение файлов с ключами.
При сохранении закрытого ключа, если не заполнено поле Key passphrase, появится запрос «Хотите ли вы сохранить ключ без секретной фразы?»
Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys. Используйте WinSCP или другой клиент для работы с файлами на удалённом Linux-сервере. Вы можете скопировать файл с открытым ключом целиком на сервер, чтоб его копия хранилась в папке .ssh
Откройте файл authorized_keys через WinSCP и файл, в который вы сохранили открытый ключ (public), на локальном компьютере текстовым редактором. Скопируйте значение ключа, сохраните и закройте файл в WinSCP.
При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth выберите необходимый путь.
Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.
Отключение аутентификации по паролю
Подключитесь к серверу по SSH, используя пароль, и откройте файл sshd_config для редактирования.
vi /etc/ssh/sshd_config
Убедитесь, что указан правильный путь к открытым ключам SSH, поставьте значение параметра PasswordAuthentication no.
Перезапустите службу sshd.
service sshd restart
Подключитесь к серверу по SSH без использования пароля. Например, запустите PuTTY, проверьте, что во вкладке Connections -> Auth содержится путь к закрытому ключу и откройте подключение.
В случае успешной аутентификации по SSH-ключу вы получите доступ к командной строке сервера и сообщение вида Authenticating with public key “rsa-key-20170510”, где rsa-key-20170510 — имя применённого закрытого ключа, указанное вами в файле authorized_keys.
Источник: https://FirstVDS.ru/technology/dobavit-ssh-klyuch
SSH авторизация без пароля или по ключу
Беспарольный ssh достаточно частое явление в жизни системного администратора unix. Я бы даже сказал, что такое соединение в какой-то степени более надежное чем вход по паролю. Ведь пароль можно подсмотреть или просто подобрать.
А при беспарольном соединении на сервере должен находиться публичный ключ, а на клиенте секретный ключ. Вход без ключа отключить.
И тогда если у тебя нет ключика на сервер и не попасть по ssh
А еще можно связку ключ-публичный ключ обезопасить парольной фразой, тогда точно авторизация ssh будет криптостойкой.
Генерируем пару ключей для такого ssh соединения. Выполнять команду будем на клиенте (на той машине откуда будем выполнять ssh соединение), ведь именно тут будет храниться наш секретный ключ. Убедимся что директория .ssh создана в вашем домашнем каталоге и имеет права 600. Теперь выполняем
mik@m1k:~$ ssh-keygen -t dsa -b 1024 -f /home/user/.ssh/id_dsa Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: 95:e8:94:83:74:5c:63:0a:e1:4d:6d:77:30:86:aa:7b mik@m1k The key's randomart image is: +–[ DSA 1024]—-+ | +ooo+.+. | | o *.=++… | | o Boo. . | | o.o | | .S | | . | | . | | . E | | . | +—————–+
Парольную фразу не указываем, нажимаем Enter.
- -t dsa – тип ключа. Есть rsa и dsa. Dsa это для второй версии ssh, которая сейчас везде по умолчанию. Rsa – первая версия ssh.
- -b 1024 длина ключа
- -f /home/user/.ssh/id_dsa – каталог где будет сохранен ключ id_dsa и его публичный ключ id_dsa.pub
Получаем два файла id_dsa и id_dsa.pub. PUB ключ – это публичный, а id_dsa секретный. Переносим файл id_dsa.pub на сервер, куда мы будем подключаться в директорию /home/user/.ssh/ того пользователя под которым мы будем соединяться по ssh.
Теперь надо изменить конфигурацию ssh сервера (файл /etc/ssh/sshd_config) той машины куда мы перенесли публичный ключ. Раскомментируем строки по которым мы разрешим использовать ключи, запретим логиниться по ssh пользователю root.
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PermitRootLogin no
Обязательно после изменения конфига ssh перезапускаем сервер ssh. Для linux и freebsd можно использовать команду
#killall -HUP /usr/sbin/sshd
Возвращаемся к нашему публичному ключу. Переименовываем ключ id_dsa.pub в файл authorized_keys, назначаем файлу правами 600 и оставляем файл в папке /home/user/.ssh.
Пробуем соединиться с нашей машины
mik@m1k:~# ssh -i /home/user/.ssh/id_dsa [email protected] The authenticity of host '[192.168.0.1]:22 ([192.168.0.1]:22)' can't be established. RSA key fingerprint is be:68:fe:64:bb:62:d6:d8:a9:62:3e:76:17:85:76:94. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.0.1]:22,[192.168.0.1]:22' (RSA) to the list of known hosts. Last login: Thu Jul 29 11:12:22 2010 from mik.localhost Linux 2.6.29.6-gw-smp. mik@gw:~$
Первый раз спросит подтверждение на соединение. После ответа yes мы должны попасть на удаленную машины безо всякого пароля.
Кстати, в вышепреведенном случае местоположение нашего секретного ключа “-i /home/user/.ssh/id_dsa” можем не указывать.
Я специально назвал его id_dsa, что является названием по умолчанию. При указании другого файла, например для соединения со второй машиной по ключу, получится что название по умолчанию id_dsa уже занято.
Так что будьте готовы что для конкретного соединения надо будет указывать свой ключ.
Если в конфиге sshd_config на удаленной машине, где мы уже правили конфиг, выставить
UsePAM no
Тогда уже, кроме как по ключу, попасть на эту машину и не сможем.
Наверное вы уже поняли, что если при создании ключа набрать парольную фразу, тогда при соединении с машиной от вас будет требоваться парольная фраза. Остальные действия с ключами аналогичные.
И теперь помните, если хотите заходить на сервер с разных компьютеров, то на каждый компьютер надо переносить id_dsa секретный ключ. Я бы рекомендовал носить его на флешке, а флешку не терять
Источник: https://ruunix.ru/642-ssh-bez-paroly-ili-po-kluchu.html
RSA или авторизация SSH по ключу | сЭВО:эволюция работ
Настроим авторизацию по ключу RSA для SSH сервера. Помимо удобства в использовании мы сильно обезопасим нашу систему от взлома. Рассмотрим разные варианты использования подключения по ключу. Надежное хранение приватных ключей гарантия подключения.
Введение
Не на долго удалось мне отложить настройку этого варианта подключения к серверу. Необходимость настройки доступа по ключу пришла откуда я даже не думал. Неожиданно обнаружил что резервные копии периодически не проходят на Yandex.Disk.
Резервирование сайтов у меня производится скриптом который резервирует вначале файлы сайта а потом базу. Пропуски были как с файлами так и с базами.
Так как я не настроил еще систему надежного мониторинга резервных копий я решил перенести резервное копирование на свой сервер с которым идет соединение ssh.
Для того чтобы система сама соединялась по ключу к ssh серверу я создал на сервере пользователя которого запер в своей домашней директории с архивными копиями и при генерации связки ключей не указывал парольной фразы. Только в таком варианте при перезагрузке сервера мне не надо будет осуществлять вручную подключение к ресурсу куда будет производиться резервное копирование.
Генерация пары ключей RSA
Механизм авторизации по ключу прост. На то место куда мы подключаемся нам надо повесить замок (публичный ключ название.
pub) а сам ключик с помощью которого мы сможем подключится (приватный ключ название) держать у себя и с помощью его открывать замочек.
Мало того, замок вешается не на всю систему а именно на конкретного пользователя под которым мы будем авторизовываться.
Создадим связку ключей указав тип -t rsa, длину ключа -b 2048 и место с необходимым нам названием:
ssh-keygen -t rsa -b 2048 -f /home/user/.ssh/rsa_sevo44 = вывод команды = Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/rsa_sevo44. Your public key has been saved in /home/user/.ssh/rsa_sevo44.pub. The key fingerprint is: SHA256:A9d+2cz6M1GK482oOxf/zweqt9B18WPox04m+Deczgc user@H4530 The key's randomart image is: +—[RSA 1024]—-+ | | | . | | . . . . | | o . =. +| | S . oo==o| | . o*oE..| | [email protected].| | ..B.&*o| | +B.o+BO| +—-[SHA256]—–+
По результату видим что создалась пара ключей с названием rsa_sevo44.
Настройка SSH сервера
Настройка сервера на всех системах Linux сводится к редактированию конфигурационного файла ssh сервера. Данный пример файла от системы CentOS 7 но и у других тоже самое:
mcedit /etc/ssh/sshd_config = необходимые параметры с пояснениями = RSAAuthentication yes PubkeyAuthentication yes PubkeyAcceptedKeyTypes ssh-dss #Путь к файлу с публичными ключами AuthorizedKeysFile %h/.ssh/authorized_keys #Отключение возможности авторизации по паролю PasswordAuthentication no #Вид публичного ключа для авторизации PubkeyAcceptedKeyTypes ssh-rsa
Перезагрузим сервер SSH:
systemctl restart ssh
Добавление публичного ключа RSA
Используем для добавления публичного ключа команду указав необходимый ключ и пользователя куда мы хотим повесить замок:
ssh-copy-id -i /home/user/.ssh/rsa_sevo44.pub [email protected] = вывод команды = /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/home/user/.ssh/rsa_sevo44.pub” /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: “ssh '[email protected]'” and check to make sure that only the key(s) you wanted were added.
После введения пароля от пользователя к которому мы хотим повесить публичный ключ он добавится в список который находится в файле /root/.ssh/authorized_keys.
Проверим добавление ключа на сервере:
cat /root/.ssh/authorized_keys = вывод команды = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCHkWoBv8b+j11IJ685m4WrYCdgx/v5bqwC3AahFyySH4yK0CV8ZJA7H6e3bbkPEI1Aw2xB6xRUS7NC4B3dGciDycMJJumX/OGpocm7A4BdrdODXfHzW5ap/WTN46/nlq7pMZH/8sa8GLzhpOv3OokUogLZFh1zZaFD4M0Hiseyw== user@H4530
Если хотите можете сверить данные с нужной строки и данными с файла публичного ключа. Данные будут идентичны.
Запоминаем пароль с помощью ssh-agent
Так как мы указали нестандартное название то без указания места нашего приватного ключа система его не будет видеть ни при каких обстоятельствах.
Для добавления ключей в список для использования во время работы на компьютере используем сервис ssh-agent.
Проверим состояние ssh-agent:
ps -C ssh-agent = вывод команды = PID TTY TIME CMD 4564 ? 00:00:00 ssh-agent
Теперь нам надо добавить нужный ключ командой:
ssh-add /home/user/.ssh/rsa_sevo44 = вывод команды = Enter passphrase for /home/user/.ssh/rsa_sevo44: вводим пароль Identity added: /home/user/.ssh/rsa_sevo44 (/home/user/.ssh/rsa_sevo44)
Посмотреть добавленные ключи можно командой:
ssh-add -l = вывод команды = 1024 SHA256:A9d+2cz6M1GK482oOxf/zweqt9B18WPox04m+Deczgc /home/user/.ssh/rsa_sevo44 (RSA)
Для удаления всех ключей применим опцию -D:
ssh-add -D = вывод команды = All identities removed.
Такую команду удобно использовать если мы работали на каком то чужом компьютере доступ которому может быть у других людей. Для удаления только своего ключа можно использовать опцию -d путь к ключу.
Авторизация по ключу в SSH
Подключимся к нужному серверу по нестандартному порту с выводом истории подключения ssh:
ssh -p 4223442 [email protected] -v = вывод части команды с комментариями = OpenSSH_7.5p1-hpn14v12, OpenSSL 1.0.2k 26 Jan 2017 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Connecting to 10.10.0.2 [10.10.0.2] port 4223442. debug1: Connection established. debug1: Server host key: ecdsa-sha2-nistp256 SHA256:i8TBEPr+jQo0HT49dpo1zOgCX9xPUOlvFEDCU63tHQA debug1: Host '[10.10.0.2]:4223442' is known and matches the ECDSA host key. debug1: Found key in /home/user/.ssh/known_hosts:20 debug1: rekey after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: rekey after 134217728 blocks debug1: SSH2_MSG_SERVICE_ACCEPT received # В этой строчке мы видим возможные варианты подключения к серверу debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/user/.ssh/rsa_sevo44 debug1: Server accepts key: pkalg ssh-rsa blen 151 debug1: Authentication succeeded (publickey). Authenticated to10.10.0.2 ([10.10.0.2]:4223442). debug1: HPN to Non-HPN Connection debug1: Final hpn_buffer_size = 2097152 debug1: HPN Disabled: 0, HPN Buffer Size: 2097152 debug1: channel 0: new [client-session] debug1: Enabled Dynamic Window Scaling debug1: Requesting [email protected] debug1: Entering interactive session. debug1: pledge: network The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Jul 16 00:28:36 2017 from 10.10.0.3 root@proxmox:~#
Результат
Мы успешно можем подключатся и работать на нужном сервере без ввода пароля, но лишь до тех пор пока не перезагрузим компьютер.
Конечно можно создать сертификат без ключа и тогда некоторые вещи упрощаются но вопрос в том насколько вы доверяете своему компьютеру.
Мною если и используется создание сертификата без парольной фразы, то лишь в редких случаях и с жестким ограничением возможностей пользователя под которым подключаемся.
Источник: https://sevo44.ru/rsa-ili-avtorizacija-ssh-po-kljuchu/