Когда у нас настроен классический доступ по SSH, то от нас требуется знать логин, пароль, и номер SSH-порта (если он вдруг изменён. SSH порт по умолчанию TCP 22)
Если у Вас в распоряжении, есть 2-3 сервера, то проблем возникнуть не должно, но если у Вас много linux-машин, постоянно вводить пароль будет очень неудобно. Для того, чтобы упростить доступ, был придуман доступ по SSH-ключу.
Как работает авторизация пользователя по ключу?
На linux-машине генерируется 2 ключа: открытый и закрытый. Открытый ключ отправляется на другой сервер, к которому планируется настроить доступ без пароля. С помощью открытого ключа шифруются сообщения. Закрытый ключ нужен для того, чтобы расшифровать сообщения, зашифрованные открытым ключом. Если доступ к закрытому ключу будет получен злоумышленниками, то доступ будет скомпрометирован.
Настройка доступа по SSH-ключу между двумя linux-машинами
У нас есть два linux-сервера: Debian 10 (10.166.0.3) и CentOS 7 (10.166.0.4). Начнём настраивать доступ по ключу с сервера CentOS 7.
- По умолчанию ключи хранятся в скрытой папке пользователя. (/home/user/.ssh). Проверяем что на серверах данная папка есть:
#На CentOS 7 (10.166.0.4)
[tv1n94@c7-ssh ~]$ ls -la
total 12
drwx------. 3 tv1n94 tv1n94 74 Jan 10 14:29 .
drwxr-xr-x. 4 root root 35 Jan 10 14:29 ..
-rw-r--r--. 1 tv1n94 tv1n94 18 Apr 1 2020 .bash_logout
-rw-r--r--. 1 tv1n94 tv1n94 193 Apr 1 2020 .bash_profile
-rw-r--r--. 1 tv1n94 tv1n94 231 Apr 1 2020 .bashrc
drwx------. 2 tv1n94 tv1n94 6 Jan 10 14:32 .ssh
[tv1n94@c7-ssh ~]$
#На Debian 10 (10.166.0.3)
tv1n94@d10-ssh:~$ ls -la
total 28
drwxr-xr-x 4 tv1n94 tv1n94 4096 Jan 10 14:50 .
drwxr-xr-x 4 root root 4096 Jan 10 14:29 ..
-rw-r--r-- 1 tv1n94 tv1n94 220 Apr 18 2019 .bash_logout
-rw-r--r-- 1 tv1n94 tv1n94 3526 Apr 18 2019 .bashrc
drwx------ 3 tv1n94 tv1n94 4096 Jan 10 14:50 .gnupg
-rw-r--r-- 1 tv1n94 tv1n94 807 Apr 18 2019 .profile
drwx------ 2 tv1n94 tv1n94 4096 Jan 10 14:50 .ssh
tv1n94@d10-ssh:~$
2. На CentOS 7 выполняем генерацию открытого и закрытого ключа. Предварительно нужно проверить, что нет сгенерированных ключей. Если уже есть сгенерированные ключи, то заново генерировать не нужно.
[tv1n94@c7-ssh ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tv1n94/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tv1n94/.ssh/id_rsa.
Your public key has been saved in /home/tv1n94/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+LjfzdcTs8vGeGqliDfn1WZK/zQC0JNwwJr1SttRsCk tv1n94@c7-ssh
The key's randomart image is:
+---[RSA 2048]----+
| .o.o. |
| o+ +. |
| +E.*. |
| + .oo. |
| . S +.. |
| o o .. +.|
| . . . ..*+O|
| . o * *=%o|
| ... o B+=o*|
+----[SHA256]-----+
[tv1n94@c7-ssh ~]$
При генерации ключей будет запрошен путь к их расположению и пароль на использование ключа. Если вы всё планируете оставить без изменений (стандартный путь и ключ без пароля), то можно просто 3 раза нажать на Enter. Если вы введете пароль на использование ключа, то его нужно будет вводить при каждом подключении к другим серверам.
3. В папке .ssh у нас должно появится 2 ключа (id_rsa — закрытый и id_rsa.pub — открытый). Открытый ключ нужно отправить на сервер Debian 10 (10.166.0.3).
#Проверяем, что ключи были созданы
[tv1n94@c7-ssh ~]$ ls -la .ssh/
total 8
drwx------. 2 tv1n94 tv1n94 38 Jan 10 14:53 .
drwx------. 3 tv1n94 tv1n94 74 Jan 10 14:29 ..
-rw-------. 1 tv1n94 tv1n94 1679 Jan 10 14:53 id_rsa
-rw-r--r--. 1 tv1n94 tv1n94 395 Jan 10 14:53 id_rsa.pub
[tv1n94@c7-ssh ~]$
#Копируем открытый ключ на другой сервер
[tv1n94@c7-ssh ~]$ ssh-copy-id -i .ssh/id_rsa.pub tv1n94@10.166.0.3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.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
tv1n94@10.166.0.3's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'tv1n94@10.166.0.3'"
and check to make sure that only the key(s) you wanted were added.
#Пытаемся подключиться
[tv1n94@c7-ssh ~]$ ssh 10.166.0.3
Linux d10-ssh 4.19.0-13-cloud-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64
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 Jan 10 14:50:57 2021 from 35.235.240.176
tv1n94@d10-ssh:~$
tv1n94@d10-ssh:~$
Если вдруг на linux-машине нет утилиты ssh-copy-id, то нам нужно просто перенести ключ id_rsa.pub на другой сервер в папку .ssh. Например, можно использовать утилиту scp.
На данном этапе мы настроили доступ по ключу с сервера CentOS 7 на сервер Debian 10. Давайте теперь настроим доступ по ключу с сервера Debian 10 на сервер CentOS 7:
#Генерируем ключи
tv1n94@d10-ssh:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tv1n94/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tv1n94/.ssh/id_rsa.
Your public key has been saved in /home/tv1n94/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:JQM6VM85NpcmV2yLPOeXwpiHmo7ltNl2cEbF0QdQ9qg tv1n94@d10-ssh
The key's randomart image is:
+---[RSA 2048]----+
| ..o .o+=+ |
| . . + . oo.ooo|
| o @.*o o. o|
| . . @+ +. |
| S XE . |
| = B o |
| oo = o |
| =o+. . |
| ..=... |
+----[SHA256]-----+
#Отправляем открытый ключ на сервер CentOS 7
tv1n94@d10-ssh:~$ ssh-copy-id -i .ssh/id_rsa.pub tv1n94@10.166.0.4
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.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
tv1n94@10.166.0.4's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'tv1n94@10.166.0.4'"
and check to make sure that only the key(s) you wanted were added.
#Пробуем залогиниться
tv1n94@d10-ssh:~$ ssh 10.166.0.4
Last failed login: Sun Jan 10 15:17:19 UTC 2021 from d10-ssh.europe-north1-a.c.psychic-root-276212.internal on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Sun Jan 10 14:29:22 2021 from 35.235.240.176
[tv1n94@c7-ssh ~]$ exit
logout
Connection to 10.166.0.4 closed.
tv1n94@d10-ssh:~$
На данном этапе настройка доступа по ssh-ключу завершена, теперь мы можем логиниться между серверами без ввода пароля.
Когда используется много серверов, сложно удержать в голове все ip-адреса, для того, чтобы можно было логиниться на сервер с помощью его доменного имени, нужно внести данный сервер в файл /etc/hosts
[root@c7-ssh tv1n94]# vi /etc/hosts
#Пример файла /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.166.0.4 c7-ssh
10.166.0.3 d10-ssh
#Попробуем залогиниться по доменному имени
[tv1n94@c7-ssh ~]$ ssh d10-ssh
The authenticity of host 'd10-ssh (10.166.0.3)' can't be established.
ECDSA key fingerprint is SHA256:FOJ8Uot3DriaFAfXdFZwFL5CEXSNOEqEXh52O4F2OMY.
ECDSA key fingerprint is MD5:d2:5d:89:22:c7:5b:6d:fe:a7:c6:50:0f:a1:de:86:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'd10-ssh' (ECDSA) to the list of known hosts.
Linux d10-ssh 4.19.0-13-cloud-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64
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 Jan 10 15:08:04 2021 from 10.166.0.4
tv1n94@d10-ssh:~$