Эта статья впервые появилась на https://jaychen.cc
Автор Джейчен
Напишите короткую статью, чтобы представить процесс входа в систему с помощью ключа ssh и меры предосторожности для удаленного сервера.
Процесс входа
Вход с ключом безопаснее, чем вход с паролем, в основном потому, что он использует асимметричное шифрование, которое необходимо использовать в процессе входа в систему.пара ключей. Весь процесс входа в систему выглядит следующим образом:
- Удаленный сервер содержит открытый ключ.Когда пользователь входит в систему, сервер случайным образом генерирует строку строк и отправляет ее пользователю, который входит в систему.
- Пользователь получает строку, отправленную удаленным сервером, используяЗакрытый ключ в паре с открытым ключом удаленного сервераСтрока шифруется и отправляется на удаленный сервер.
- Сервер использует открытый ключ для расшифровки зашифрованной строки, отправленной пользователем.Если полученная расшифрованная строка совпадает со случайной строкой, отправленной клиенту на первом этапе, считается, что вход выполнен успешно.
Весь процесс входа в систему очень прост, но при фактическом использовании входа по 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 запретит вход в систему.