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