Введение
Secure Shell (SSH) — это криптографический сетевой протокол, используемый для безопасного доступа к удаленным серверам по незащищенной сети. Как профессионал в области IT, понимание того, как устанавливать безопасные соединения с серверами Linux, является важным навыком.
В этом практическом занятии (LabEx) вы научитесь создавать пары SSH-ключей, управлять своими ключами и настраивать SSH для безопасной аутентификации. Эти знания являются фундаментальными для системных администраторов, разработчиков и специалистов по кибербезопасности, которым необходимо безопасно получать доступ к удаленным системам и управлять ими.
Завершив это практическое занятие, вы получите практический опыт работы с SSH, который является стандартом отрасли для безопасного удаленного администрирования серверов Linux и безопасной передачи файлов.
Основы SSH
SSH (Secure Shell) — это протокол, который обеспечивает безопасный способ доступа к удаленным компьютерам. В отличие от старых протоколов, таких как Telnet, SSH шифрует все коммуникации между клиентом и сервером, защищая ваши данные от прослушивания.
SSH имеет несколько преимуществ:
- Шифрованные коммуникации
- Прочные методы аутентификации
- Проверка целостности данных
- Безопасная передача файлов
Начнем с проверки, установлен ли SSH на вашей системе. Откройте терминал и выполните следующую команду:
ssh -V
Вы должны увидеть вывод, похожий на этот, показывающий установленную версию SSH:
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
Теперь перейдем в наш проектный каталог, где мы будем работать:
cd ~/project
Эта команда изменяет текущий каталог на /home/labex/project, где мы будем выполнять все операции в этом практическом занятии (LabEx).
Генерация пар SSH-ключей
SSH поддерживает несколько методов аутентификации, но аутентификация на основе ключей является наиболее безопасной и удобной. На этом этапе вы сгенерируете пару SSH-ключей.
Пара SSH-ключей состоит из:
- Приватного ключа: Это как ваш секретный пароль, и его никогда не следует передавать.
- Публичного ключа: Его можно безопасно передавать удаленным серверам, к которым вы хотите подключиться.
Для генерации новой пары SSH-ключей используйте команду ssh-keygen:
ssh-keygen -t rsa -b 4096
Эта команда задает:
-t rsa: Использовать алгоритм RSA для генерации ключей-b 4096: Создать ключ размером 4096 бит, что обеспечивает высокий уровень безопасности
При выполнении этой команды вас попросят:
- Ввести путь к файлу для сохранения ключа (нажмите Enter, чтобы принять путь по умолчанию
~/.ssh/id_rsa) - Ввести пароль-фразу (вы можете оставить это поле пустым в этом практическом занятии (LabEx), нажав Enter дважды)
Вот пример того, что вы должны увидеть:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
| |
| . . |
| . + . |
| . = + . |
| . = S = . |
| . . = = + . |
| . . + = + . |
| . . + + . |
| .. . . |
+----[SHA256]-----+
Теперь давайте рассмотрим сгенерированные ключи. Чтобы просмотреть ваш публичный ключ, используйте:
cat ~/.ssh/id_rsa.pub
Это отобразит ваш публичный ключ, который выглядит так:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters ... ...labex@hostname
Помните, публичный ключ можно передавать, но приватный ключ (~/.ssh/id_rsa) должен быть надежно защищен и никогда не должен передаваться кому-либо.
Понимание прав доступа к SSH-ключам
По соображениям безопасности SSH очень требователен к разрешениям на файлы. На этом этапе вы узнаете о правильных разрешениях для SSH-ключей и о том, как их установить.
Давайте проверим текущие разрешения для ваших SSH-ключей:
ls -la ~/.ssh/
Вы должны увидеть вывод, похожий на следующий:
total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex 741 Jan 1 12:00 id_rsa.pub
Правильные разрешения следующие:
- Приватный ключ (
id_rsa):600(доступен только вам для чтения и записи) - Публичный ключ (
id_rsa.pub):644(доступен для чтения всем, но запись разрешена только вам) - Каталог
.ssh:700(доступен только вам)
Если ваши разрешения отличаются, вы можете установить их правильно с помощью следующих команд:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
Давайте проверим, были ли разрешения установлены правильно:
ls -la ~/.ssh/
Теперь вывод должен показать правильные разрешения:
total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex 741 Jan 1 12:00 id_rsa.pub
Эти разрешения являются критически важными для безопасности - SSH откажется работать, если разрешения слишком открыты, так как это может привести к раскрытию вашего приватного ключа.
Настройка аутентификации SSH
На этом этапе вы узнаете, как настроить аутентификацию на основе SSH-ключей. Это позволит вам входить на удаленные сервера без необходимости каждый раз вводить пароль.
Для работы аутентификации по SSH-ключам вам нужно скопировать ваш публичный ключ в файл ~/.ssh/authorized_keys на сервере. В реальной ситуации вы бы использовали команду ssh-copy-id для этого:
## Example for reference (Do not run this)
## ssh-copy-id username@remote_host
Поскольку в этом практическом занятии (LabEx) у нас нет реального удаленного сервера, мы имитируем этот процесс, создав локальный файл authorized_keys.
Сначала создадим каталог .ssh, если он еще не существует:
mkdir -p ~/.ssh
Команда mkdir -p создает каталог, если он не существует, и не делает ничего, если он уже есть.
Теперь создадим или добавим в файл authorized_keys:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Эта команда добавляет ваш публичный ключ в файл authorized_keys. В реальной среде этот файл находился бы на удаленном сервере.
Проверим содержимое файла authorized_keys:
cat ~/.ssh/authorized_keys
В выводе вы должны увидеть ваш публичный ключ, который должен выглядеть примерно так:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname
Наконец, убедимся, что файл authorized_keys имеет правильные разрешения:
chmod 600 ~/.ssh/authorized_keys
Это устанавливает разрешения на чтение и запись только для владельца, что является требованием безопасности для файла authorized_keys.
Понимание файла конфигурации SSH
SSH позволяет настраивать его поведение с помощью файла конфигурации SSH. Это особенно полезно, когда вы регулярно подключаетесь к нескольким серверам.
Давайте создадим файл конфигурации SSH, чтобы увидеть, как он работает:
nano ~/.ssh/config
Эта команда открывает текстовый редактор nano. Добавьте следующее содержимое в файл:
## Default settings for all hosts
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
## Example server configuration
Host example
HostName example.com
User username
Port 22
IdentityFile ~/.ssh/id_rsa
В этой конфигурации:
ServerAliveInterval 60отправляет сигнал о том, что соединение активно каждые 60 секундServerAliveCountMax 3разрывает соединение, если сервер не отвечает на 3 последовательных сигнала- Раздел
Host exampleсоздает псевдоним, чтобы вы могли подключаться с помощью командыssh exampleвместоssh username@example.com -p 22
Чтобы сохранить файл в nano, нажмите Ctrl+O, затем Enter для подтверждения, и Ctrl+X для выхода.
Теперь установим правильные разрешения для файла конфигурации:
chmod 600 ~/.ssh/config
Это гарантирует, что только вы можете читать и записывать в этот файл, что важно для безопасности.
В реальной ситуации вы теперь сможете подключиться к серверу просто введя:
## Example for reference (Do not run this)
## ssh example
Вместо:
## Example for reference (Do not run this)
## ssh username@example.com -p 22
Файл конфигурации SSH - это мощный инструмент, который может сэкономить вам время и сделать управление множеством SSH-соединений намного проще.
Резюме
В этом практическом занятии (LabEx) вы изучили основы SSH (Secure Shell) для безопасного подключения к Linux-серверам. Вот краткий обзор того, что вы достигли:
- Вы поняли, что такое SSH и какова его важность для безопасных удаленных подключений
- Вы сгенерировали пару SSH-ключей, состоящую из приватного и публичного ключей
- Вы узнали о важности правильных разрешений файлов для безопасности SSH
- Вы настроили аутентификацию на основе SSH-ключей, настроив файл
authorized_keys - Вы создали файл конфигурации SSH для настройки и упрощения SSH-соединений
Эти навыки являются обязательными для всех, кто работает с Linux-системами, особенно в облачных вычислениях, системном администрировании, DevOps и кибербезопасности. SSH является стандартным методом безопасного доступа к удаленным Linux-серверам и ежедневно используется ИТ-специалистами по всему миру.
Благодаря знаниям, полученным в этом практическом занятии, вы теперь можете устанавливать безопасные соединения с Linux-серверами, что является фундаментальным навыком для дальнейшего изучения системного администрирования Linux и облачных вычислений.



