Начало > Помощен център > Cloud сървъри > Администрация на сървър > Удостоверяване с публичен ключ

Удостоверяване с публичен ключ

Помощен център

Удостоверяване с публичен ключ

Настройването на удостоверяване с публичен ключ в сървъра се счита за доказано добра практика и увеличава сигурността на вашия сървър. Чрез SSH двойка ключове може да се логнете само от компютър, на който се намира частния ключ. Допълнително SSH ключът може да бъде осигурен с парола, която се въвежда при генериране на ключа, и която е различна от паролата на потребителя на сървъра, в чиито акаунт се логвате.

Удостоверяване с публичен ключ през SSH клиент PuTTY в Windows OS

Двойка SSH ключове (публичен и частен) може да бъде генерирана по различни начини. В статията ще ви покажем как може да генерирате SSH ключове с клиента PuTTYgen Key Generator в Windows и през команден ред в Linux компютър.

От този URL (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) може да изтеглите и двете програми: PuTTY и PuTTYgen.

Генериране на SSH ключове с PuTTYgen Key Generator

Стартирайте програмата, уверете се, че в секцията Parameters е избрана опцията RSA и в полето Number of bits... е въведена цифрата 2048 (това са опциите по подразбиране) и кликнете бутона Generate:

Начален изглед на PuTTYgen Key Generator

До завършване на процеса движете мишката в полето под индикатора за уникалност на двойката ключове (спиране движението на мишката в прозореца спира самия процес):

Генериране на SSH ключове

В полетата Key passphrase и Confirm passphrase може да въведете парола, с която да защитите ключа и която трябва да въвеждате при всяко логване в сървъра или може да оставите полетата за парола празни и да се логвате директно само с публичния ключ:

Полета за въвеждане на парола

През бутоните Save public key и Save private key може да запазите публичния и частния ключ във файлове на компютъра.

Още една подробност - преди да запазите публичния ключ във файл, копирайте цялото съдържание на полето Public key for pasting... от PuTTYgen Key Generator в клипборда. След това запазете съдържанието на ключа във файла и под него поставете копираното съдържание - ще забележите, че записите се различават. В следващите стъпки ще ползваме само копираното съдържание от полето Public key for pasting...:

Копиране на публичния ключ

Съдържанието на частния ключ запазваме като кликнем бутона Save private key - ако сте оставили полетата за парола празни, програмата ще иска потвърждение, че вие искате да запазите ключа без парола.

Може да затворите PuTTYgen и да стартирате PuTTY.

В първия прозорец въведете име на сесия в полето Saved Sessions, в полето Host name (or IP address) въведете името или IP адреса на сървъра, въведете коректния SSH порт в полето Port, ако SSH порта по подразбиране (22) е променен:

Общи настройки в PuTTY

В лявото меню кликнете Data, както е показано на изображението, и в полето Auto-login username въведете името на потребителя:

Настройване на потребител в PuTTY

След това в менюто кликнете Auth, кликнете бутона Browse срещу полето Private key file for authentication и посочете файла, в който запазихте частния ключ (.ppk):

Достъп до частния ключ в PuTTY

В менюто се върнете в най-горната част и кликнете Session - данните за IP адрес, порт и име на сесия, които въведохте в началото, трябва да са запазени и непроменени. Кликнете бутона Save за да запазите всички промени, новата сесия също ще бъде записана в полето.

Не затваряйте програмата PuTTY (дори да я затворите не е фатално, тъй като цялата информация е записана).

Сега трябва да се логнете в сървъра в акаунта на потребителя, който въведохте в PuTTY. В неговата директория /home/username/ създайте директория .ssh (не трябва да пропускате точката в началото) и променете правата на директорията като изпълните последователно следните команди:

mkdir .ssh

chmod 700 .ssh

Съдайте файл authorized_keys в директорията .ssh със следната команда:

nano .ssh/authorized_keys

Ще се отвори текстовият редактор nano, в който трябва да поставите кода на публичния ключ, който копирахте от полето в PuTTYgen и записахте отделно от стандартния код.

Запазете файлът с Ctrl+o и Enter и го затворете с Ctrl+x.

Променете правата на файла authorized_keys със следната команда:

chmod 600 .ssh/authorized_keys

Върнете се в PuTTY или го отворете отново и кликнете два пъти името на сесията, която създадохте в началото:

Using username "commonuser".
Authenticating with public key "rsa-key-20190728"
Last login: Tue Jul 30 11:48:00 2019 from 192.168.1.7
[commonuser@centos7 ~]$

Логнахме се успешно в сървъра в акаунта на потребителя commonuser без да въвеждаме парола.

Важно: Ако направите промяна на SSH порта в конфигурацията на сървъра, трябва да направите съответната промяна в PuTTY (променете порта и кликнете бутона Save).

Удостоверяване с публичен ключ през SSH в Linux OS

Сега ще покажем колко по-бързо и по-лесно може да се логнем в същия сървър през акаунта на друг потребител от Linux компютър.

Генериране на SSH ключове в терминал

Отваряме терминал и изпълняваме командата:

ssh-keygen

local@ubuntu:~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:tEOyyaR5OVsbnnYWpaRZrbdAtjUGpKzTSSzWVoFdzlM local@ubuntu
The key's randomart image is:
+---[ECDSA 256]---+
|   ..o           |
| .o . .          |
|.+=o ..          |
|.Booo. +         |
|=oO..o= S        |
|E*.++=.= .       |
|.o.+Boo o        |
|..o.o=..         |
|... .oo          |
+----[SHA256]-----+
local@ubuntu:~/.ssh$ 

Системата генерира два файла:

  • id_rsa.pub - публичен ключ;
  • id_rsa - частен ключ;

Сега трябва да копираме публичния ключ на сървъра, където искаме да се логнем. За целта изпълняваме само една команда, в която посочваме потребителя, IP адреса на сървъра и след това въвеждаме паролата на потребителя:

ssh-copy-id keyauth@192.168.1.10

local@ubuntu:~/.ssh$ ssh-copy-id keyauth@192.168.1.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ubuntu/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ECDSA key fingerprint is SHA256:i4UPvg6cI/Eb1eACeM7kUmtyIo7aBt1L2kcYHA2otaw.
Are you sure you want to continue connecting (yes/no)? yes
/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
keyauth@192.168.1.10's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'keyauth@192.168.1.10'"
and check to make sure that only the key(s) you wanted were added.
local@ubuntu:~/.ssh$

След това изпълняваме следната команда:

local@ubuntu:~/.ssh$ ssh keyauth@192.168.1.10
Last login: Mon Jul 29 23:33:15 2019 from 192.168.1.9
[keyauth@centos7 ~]$

Логнахме се успешно в сървъра в акаунта на потребителя keyauth без да въвеждаме парола.

Randomart символи

Показаните символи (randomart) са графично изображение на току-що генерирания ключ.

Randomart не носи полза на потребителя, който генерира SSH ключа, но може да бъде полезен за потребител, който се свързва често към сървъра с опцията -o VisualHostKey=yes към SSH командата:

ssh user@domainname.com -o VisualHostKey=yes

Randomart се зарежда при всяко логване с горната команда. Идеята е, че потребителят по-лесно може да разпознае визуално дали ключът е един и същ и да забележи разликата ако не е, отколкото ако се опита да сравнява низа SHA256.

local@ubuntu:~$ ssh keyauth@192.168.1.10 -o VisualHostKey=yes
Host key fingerprint is SHA256:i4UPvg6cI/Eb1eACeM7kUmtyIo7aBt1L2kcYHA2otaw
+---[ECDSA 256]---+
|   ..o           |
| .o . .          |
|.+=o ..          |
|.Booo. +         |
|=oO..o= S        |
|E*.++=.= .       |
|.o.+Boo o        |
|..o.o=..         |
|... .oo          |
+----[SHA256]-----+
Last login: Tue Jul 30 08:08:04 2019
[keyauth@centos7 ~]$