Анализ процесса входа в систему с использованием ключа SSH

задняя часть SSH

Эта статья впервые появилась на https://jaychen.cc

Автор Джейчен

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

Процесс входа

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

  1. Удаленный сервер содержит открытый ключ.Когда пользователь входит в систему, сервер случайным образом генерирует строку строк и отправляет ее пользователю, который входит в систему.
  2. Пользователь получает строку, отправленную удаленным сервером, используяЗакрытый ключ в паре с открытым ключом удаленного сервераСтрока шифруется и отправляется на удаленный сервер.
  3. Сервер использует открытый ключ для расшифровки зашифрованной строки, отправленной пользователем.Если полученная расшифрованная строка совпадает со случайной строкой, отправленной клиенту на первом этапе, считается, что вход выполнен успешно.

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

Создать пару ключей

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

➜  ~ ssh-keygen
Generating public/private rsa key pair.

Enter file in which to save the key (/home/jaychen/.ssh/id_rsa):   #1
Enter passphrase (empty for no passphrase):                        #2
Enter same passphrase again:                                       #3

воплощать в жизньssh-keygenПриведенное выше приглашение появится в#1Здесь пользователю предлагается ввести имя сгенерированного закрытого ключа.Если не заполнено, закрытый ключ по умолчанию сохраняется в/home/jaychen/.ssh/id_rsaв файле. Здесь следует отметить две вещи:

  • Сгенерированный ключ будет помещен ввоплощать в жизньssh-keygenДомашний каталог пользователя Commandвниз.sshпапка. который$HOME/.ssh/Под содержанием.
  • Имя файла сгенерированного открытого ключа, обычно это имя файла закрытого ключа, за которым следует.pubсуффикс.

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

#3это повторение#2Введите пароль, здесь нет глупостей.

После генерации ключа вы можете/home/jaychen/.ssh/Я вижу два файла ниже (я положу их здесь/home/jaychenСледующее связано с тем, что я использую пользователя jaychen для выполненияssh-keygenЗаказ)

➜  .ssh ls
total 16K
drwx------ 2 jaychen jaychen 4.0K 12月  7 17:57 .
drwx------ 9 jaychen jaychen 4.0K 12月  7 18:14 ..
-rw------- 1 jaychen jaychen 1.7K 12月  7 17:57 id_rsa.github
-rw-r--r-- 1 jaychen jaychen 390 12月  7 17:57 id_rsa.github.pub

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

первый вход по ssh

Команда для входа на удаленный сервер

ssh 登录用户@服务器ip

Здесь мы начинаем обращать внимание на концепцию двух пользователей:

  • Пользователь, выполняющий эту команду локально, то есть пользователь, вошедший в систему в данный момент, имя пользователя, которое я здесь показываю, — jaychen.
  • Пользователь для входа на удаленный сервер.

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

Содержимое открытого ключа должно быть сохранено вв домашнем каталоге пользователя, который должен войти в систему.ssh/authorized_keysв файле. Предположим, вы должны использовать пользователя root для входа на удаленный сервер, тогда содержимое открытого ключа должно быть сохранено./root/.ssh/authorized_keysсередина. Уведомлениеauthorized_keysВ файле может храниться информация о нескольких открытых ключах, и каждый открытый ключ отделяется новой строкой.

После загрузки выполнить

ssh root@远程服务器 ip

В это время, как упоминалось выше, удаленный сервер отправит обратно случайную строку.В это время необходимо использовать закрытый ключ для шифрования строки. И этот закрытый ключ пойдет нав домашнем каталоге пользователя, выполнившего команду.sshсодержаниеПрочитайте файл закрытого ключа, файл закрытого ключа по умолчаниюid_rsaдокумент. который$HOME/.ssh/id_rsaдокумент. Предполагая, что закрытый ключ шифруется при создании ключа, в это время требуется пароль.

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

➜  .ssh ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg.
Are you sure you want to continue connecting (yes/no)?

Это предложение означает, что реальная личность удаленного сервера не может быть проверена, известен только отпечаток открытого ключа (значение MD5 открытого ключа).61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg, действительно ли вы хотите установить соединение. Приведенное выше приглашение, по-видимому, избегает существованияатака «человек посередине».

атака «человек посередине»

Предпосылка атаки «человек посередине» заключается в том, что при первом входе на удаленный сервер вы ничего не знаете об удаленном сервере, кроме имени пользователя, открытого ключа и закрытого ключа, соответствующего имени пользователя. , и ip сервера. Предположим, вы заходите на удаленный хост 192.168.1.1 удаленно через ssh, а в процессе подключения вас перехватывает третья сторона, а третья сторона выдает себя за хост 192.168.1.1, то вы будете напрямую подключаться к чужим серверы. Это атака «человек посередине».

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

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

файл known_hosts

После первого входа в систему в$HOME/.ssh/каталог будет генерироватьknown_hostsфайл с содержимым, подобным следующему

➜  .ssh cat known_hosts

192.168.1.1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOPKYWolOYTDevvBR6GV0rFcI0z/DHZizN5l/ajApsgx+UcOOh51liuyBRRCIyF+BR56Le0lP0Pn6nzvLjbqMqg=

Этот документ записывает открытый ключ отпечатков пальцев удаленный хост и удаленный хост, соответствующий IP, затем на следующем логине, отправленном с удаленного хоста открытого ключа отпечатков пальцев, прямой иknown_hostsСравнение ключевого отпечатка соответствующего IP-адреса в файле.

конфигурация конфигурации

Много раз нашей разработке может потребоваться подключение к нескольким удаленным серверам, и нам нужно настроить закрытый ключ сервера git. Так много серверов не могут совместно использовать набор закрытых ключей, и разные серверы должны использовать разные закрытые ключи. Но, как видно из приведенного выше процесса подключения, ssh по умолчанию читает$HOME/.ssh/id_rsaФайл регистрируется как закрытый ключ. Если вы хотите, чтобы разные серверы использовали разные закрытые ключи для входа в систему, вам необходимо войти в систему..sshнаписать в каталогconfigфайл для настройки.

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

Host github.com
	User jaychen
	IdentityFile ~/.ssh/id_rsa.github
Host 192.168.1.1
	User ubuntu
	IdentityFile ~/.ssh/id_rsa.xxx

вышеconfigПоля файла имеют следующие значения:

  • Хост указывает IP-адрес удаленного хоста. Помимо использования IP-адреса, вы также можете напрямую использовать URL-адрес.
  • Пользователь относится к пользователю, вошедшему на удаленный хост.
  • IdentityFile указывает, какой файл закрытого ключа использовать.

хорошо написанconfigПосле файла нужно поставитьconfigИзмените права доступа к файлу наrw-r--r--. Если разрешения слишком велики, ssh запретит вход в систему.