🔬 Как обменяться ключом SSH для аутентификации без пароля между серверами Linux |

🔬 Как обменяться ключом SSH для аутентификации без пароля между серверами Linux

Мануал

Внедрение аутентификации на основе ключей SSH в Linux

SSH (защищенная оболочка) – это протокол, который создает криптографически защищенное соединение между клиентом SSH и удаленными серверами.

Используя SSH, вы можете безопасно управлять удаленными серверами и администрировать их.

Это может быть полезно во многих отношениях.

  • Развертывание на нескольких серверах
  • Остановить / запустить службы удаленно
  • Автоматизация

и все что вы захотите …

Как системный администратор, это базовые вещи, которые нужно знать.

Давайте узнаем, как …

Я сгенерирую закрытый ключ и открытый ключ.

Закрытый ключ должен храниться на вашем клиентском компьютере ssh и должен быть защищен.

Открытый ключ должен быть скопирован на удаленный сервер для входа на этот сервер с клиентского компьютера SSH без ввода пароля.

Вы узнаете следующее:

  • Установка SSH (не требуется, если он уже установлен)
  • Генерация ключей SSH
  • Копирование ключей SSH на удаленный сервер
  • Вход на удаленный сервер, используя SSH

Для демонстрации у меня есть 2 сервера с IP-адресами, указанными ниже: одна система является клиентом, а другая – сервером, на котором я буду входить через ssh с клиентского компьютера.

  • Клиент (пользователь -> itsecforu): 192.168.56.102
  • Удаленный сервер (пользователь -> ubuntu): 192.168.56.101

 

Установка SSH

Прежде чем выполнять действия, упомянутые в этой статье, убедитесь, что на серверах установлен openssh-server.

Если он не установлен, выполните команды показанные ниже для установки.

sudo apt-get install openssh-server

sudo systemctl enable ssh

sudo systemctl start ssh

Вы можете запустить команду ssh, чтобы проверить, установлена служба в системе или нет.

$ ssh

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]

           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]

           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]

           [-i identity_file] [-J [user@]host[:port]] [-L address]

           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]

           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]

           [-w local_tun[:remote_tun]] destination [command]

Генерация ключей SSH

Это должно быть сделано на клиентском сервере.

Запустите команду ssh-keygen для генерации ключа SSH.

Просто нажмите Enter, когда система запрашивает файл, passphrase.

По умолчанию он генерирует пару ключей в каталоге ~/.ssh.

Id_rsa – это закрытый ключ, а id_rsa.pub – связанный с ним открытый ключ.

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/geekflare/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/geekflare/.ssh/id_rsa.

Your public key has been saved in /home/geekflare/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 geekflare@geekflare

The key's randomart image is:

+---[RSA 2048]----+

|o+..             |

|+o+              |

|oo. .     . o    |

|.. *     . *     |

|  B .   S . o.   |

| O o . .  . ... .|

|+ @ o o . E=.  o |

| B + o + .o.= .  |

|  + ... o. oo+   |

+----[SHA256]-----+

Система сгенерирует два новых файла в каталоге ~/.ssh.

Скопируйте ключ SSH на удаленный сервер

Открытй ключ должен быть скопирован в папку ~/.ssh на удаленном сервере.

У большинства серверов уже должна быть эта папка, если нет, вам нужно создать эту папку.

И, чтобы сделать это:

  • Войдите на удаленный сервер с тем пользователем, которого вы хотите подключить. В моем случае это ubuntu
  • Убедитесь, что текущий рабочий каталог является домашним каталогом пользователя, а затем создайте папку .ssh. Вы также можете использовать следующую единственную команду, чтобы создать его
mkdir -p ~/.ssh

Если у вас уже есть папка .ssh, сделайте ее резервную копию.

Далее давайте спушим открытый ключ с клиентского сервера.

На клиентском компьютере (192.168.56.102) выполните приведенную ниже команду, чтобы скопировать открытый ключ на удаленном сервере в файл authorized_keys в каталоге .ssh.

 cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'

ubuntu@192.168.56.101's password:

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

$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

Отлично, это означает, что ключ был обменен, и разрешение установлено.

Вход на удаленный сервер с использованием SSH

Давайте проверим, работает ли это!

Давайте войдем на удаленный сервер (192.168.56.101) с клиентского компьютера (192.168.56.102) как пользователь itsecforu

Запустите команду ниже для проверки, на этот раз она не будет спрашивать пароль.

$ ssh ubuntu@192.168.56.101

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)

 * Documentation:  https://help.ubuntu.com

 * Management:     https://landscape.canonical.com

 * Support:        https://ubuntu.com/advantage

346 packages can be updated.

11 updates are security updates.

Last login: Mon Jun 17 00:10:32 2019 from 192.168.56.101

Ну вот…

Я успешно вошел на удаленный сервер. Выполнение команды, показанную ниже даст IP-данные удаленного компьютера.

ubuntu@ubuntu:~$ ifconfig

enp0s3    Link encap:Ethernet  HWaddr 08:00:27:9b:47:86

          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

          inet6 addr: fe80::5c62:3267:b752:fe5d/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:20239 errors:0 dropped:0 overruns:0 frame:0

          TX packets:5406 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:22678039 (22.6 MB)  TX bytes:701710 (701.7 KB)

enp0s8    Link encap:Ethernet  HWaddr 08:00:27:a9:4a:6b

          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

          inet6 addr: fe80::54a9:761c:9034:21a2/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:330 errors:0 dropped:0 overruns:0 frame:0

          TX packets:197 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:42847 (42.8 KB)  TX bytes:32774 (32.7 KB)

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:997 errors:0 dropped:0 overruns:0 frame:0

          TX packets:997 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1

          RX bytes:79654 (79.6 KB)  TX bytes:79654 (79.6 KB)

 

Заключение

Как вы видите, настроить обмен ключами SSH очень просто.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий для cryptoparty Отменить ответ

  1. Алексей

    “Закрытый ключ должен быть скопирован в папку ~/.ssh на удаленном сервере.”
    Читаем дальше
    “На клиентском компьютере (192.168.56.102) выполните приведенную ниже команду, чтобы скопировать открытый ключ на удаленном сервере в файл authorized_keys в каталоге .ssh.”
    Так какой ключ копировать на удаленный сервер ?))) Судя по команде да и логично открытый .pub/ Но это я просто знаю,т.к. делал не раз,а новичок может “заблудиться” в ключах ))

    Ответить
    1. cryptoparty автор

      Спасибо, поправили

      Ответить