SSH (ч.1): Что такое SSH. Утилиты SSH

Оглавление

Содержание «Полное руководство по SSH в Linux и Windows»

1. Что такое SSH. Утилиты SSH

1.1 Что такое и для чего нужен SSH

1.2 Утилиты SSH

1.3 Как установить OpenSSH

1.4 Управление службой OpenSSH

1.5 Как проверить журнал событий SSH службы

1.6 Как увидеть неудачные попытки входа SSH

1.7 Как просмотреть журнал подключений пользователей SSH

2. Настройка сервера OpenSSH

3. Как подключиться к SSH. Настройка клиента OpenSSH

4. Создание и настройка ключей OpenSSH

5. Копирование файлов с помощью scp и sftp

6. Подсказки и сложные случаи использования OpenSSH


Что такое и для чего нужен SSH

SSH — это набор программ, которые позволяют выполнить вход на удалённую машину для выполнения команд на ней. Он предназначен для обеспечения защищённой зашифрованной связи между двумя узлами через незащищённую сеть. Соединения X11, произвольные порты TCP и сокеты домена UNIX также могут быть переадресованы по защищённому каналу. В SSH входят программы, которые дополнительно позволяют передавать файлы по зашифрованному соединению.

SSH несёт в себе различные улучшения безопасности, среди них аутентификация пользователя/хоста, шифрование данных и целостность данных, благодаря чему невозможны популярные атаки вроде подслушивания (сниффинга), DNS/IP спуфинга, подделка данных (data forgery), перехват соединения (connection hijacking) и т. д. Пользователям ftp, telnet или rlogin, которые используют протокол, передающий данные в виде открытого текста, крайне рекомендуется переключиться на SSH.

OpenSSH — это реализация с открытым исходным кодом протокола SSH, позволяющая шифровать соединение в сети посредством набора программ. Если вам хочется иметь SSH на Linux, вы можете установить OpenSSH, который состоит из сервера OpenSSH и клиентских пакетов.

Технология работает по принципу сервер-клиент. То есть на удалённой машине, на которой вы хотите выполнять команды, нужно запустить сервер OpenSSH. К этому серверу можно подключаться с помощью клиентов OpenSSH. На одном компьютере могут быть одновременно установлены и сервер и клиент. Их запуск и настройка выполняется независимо друг от друга.

Утилиты SSH

К серверным утилитам OpenSSH относятся:

  • sshd (OpenSSH Daemon) — программа демон для ssh. sshd ожидает подключений от клиентов.
  • sftp-server (серверная подсистема SFTP) — это программа, которая участвует в передачи файлов по протоколу SFTP. sftp-server не предназначен для прямого вызова, обычно она задействуется автоматически демоном sshd.

Итак, на сервере основного внимания требует sshd, а программа sftp-server будет запущена автоматически по мере необходимости.

К клиентским утилитам OpenSSH относятся:

  • ssh (клиентская программа SSH) — это программа для выполнения входа на удалённую машину и выполнения команд на этой удалённой машине.
  • scp — программа для копирования файлов на удалённую машину с локальной, или в обратном направлении — с локальной на удалённую. При передаче данных используется зашифрованный канал.
  • sftp — это тоже программа для передачи файлов по безопасному каналу. Эта программа похожа на ftp.
  • ssh-keygen — утилита для создания ключей аутентификации и управления ими. Также она может использоваться для отзыва ключей.

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

Следующие утилиты присутствуют в пакете OpenSSH, но не требуют от пользователя явного запуска или применяются редко:

  • ssh-add — добавляет приватный ключ к агенту аутентификации.
  • ssh-agent — это программа для хранения закрытых ключей, используемая для аутентификации с открытым ключом (RSA, DSA, ECDSA, Ed25519). ssh-agent обычно запускается в начале сеанса X или сеанса входа в систему, а все другие окна или программы запускаются как клиенты для программы ssh-agent. Благодаря использованию переменных среды агент может быть найден и автоматически использован для аутентификации при входе на другие машины с использованием ssh.
  • ssh-keyscan — это утилита для сбора открытых ключей хоста SSH с нескольких хостов. Она была разработана для помощи в создании и проверке файлов ssh_known_hosts. ssh-keyscan предоставляет минимальный интерфейс, подходящий для использования скриптами оболочки и perl.
  • ssh-keysign — используется ssh для доступа к ключам локального хоста и генерирования цифровой подписи, необходимой во время аутентификации на основе хоста. ssh-keysign отключена по умолчанию и может быть включена только в глобальном файле конфигурации клиента /etc/ssh/ssh_config, если для EnableSSHKeysign установлено значение «yes». ssh-keysign предназначена не для вызова пользователем, а из ssh.
  • ssh-copy-id — использует локально доступные ключи для авторизации на удаленном компьютере.

Как установить OpenSSH

Для некоторых конфигураций служба OpenSSH установлена и включена по умолчанию. Как правило, это относится к системам, к которым затруднительно получить доступ иным способом, кроме как по SSH. Например, на хостингах VPS (виртуальных частных серверов) устанавливаемые системы практически всегда даже в минимальной конфигурации уже имеют установленную и запущенную службу SSH, поэтому после развёртывания нового сервера, клиенту достаточно подключиться используя присланные учётные данные.


В образах для ARM компьютеров, которые зачастую не имеют дисплея, как правило служба OpenSSH уже установлена и запущена.

В Debain и производных (Kali Linux, Linux Mint, Ubuntu), программы OpenSSH можно установить по отдельности, например, имеются пакеты для клиента и для сервера openssh-client и openssh-server. Либо можно установить метапакет ssh, который содержит и клиентскую, и серверную часть.

sudo apt install ssh

В Arch Linux клиент и сервер OpenSSH собраны в один пакет. Для установки OpenSSH в Arch Linux выполните:

sudo pacman -S openssh

В других дистрибутивах Linux поищите пакет openssh или ssh.

Управление службой OpenSSH

Клиент ssh запускается самим пользователем по мере необходимости.

Запуск службы OpenSSH требуется только на сервере.

OpenSSH поставляется с файлами служб systemd (смотрите также «Как использовать Systemctl для управления службами Systemd и юнитами») двух видов:

  • sshd.service, который держит демона SSH постоянно активным и запускает новый процесс для каждого входящего подключения. Это особенно подходит для систем с большим количеством SSH трафика.
  • sshd.socket + sshd@.service, которые по требованию порождают экземпляры демона SSH для каждого подключения. Использование этой модели означает, что systemd прослушивает SSH сокет и запускает процесс демона только для входящего подключения. Это рекомендуемый способ запуска sshd практически во всех случаях. Удалено из пакета

Таким образом, если вы хотите воспользоваться первой моделью (демон SSH всегда активен), то для запуска службы и добавления её в автозагрузку наберите следующие команды:

sudo systemctl start sshd.service
sudo systemctl enable sshd.service

Они добавят демона SSH в автозагрузку и запустят его прямо сейчас.

Для второй модели (запуск SSH только по требованию), сделайте так:

sudo systemctl start sshd.socket

sudo systemctl enable sshd.socket

Для проверки статуса службы:

systemctl status sshd.service

Либо если вы используете сокет:

systemctl status sshd.socket

Обратите внимание, что в разных дистрибутивах служба может называться ssh или sshd, следовательно, в приведённых выше и далее командах, используйте имена:

  • sshd.socket
  • sshd.service

Или:

  • ssh.socket
  • ssh.service

Как проверить журнал событий SSH службы

События SSH можно разделить на события:

  • запуска и остановки этой службы
  • события, связанные с подключением пользователей

Просмотреть логи SSH можно различными способами, один из вариантов (помните, что в некоторых системах служба называется ssh.service, без буквы d):

journalctl -u sshd.service

Например, для вывода последних 100 записей:

journalctl -u sshd.service | tail -n 100

Также можно просмотреть события SSH с помощью:

journalctl -u "sshd@*"

или с:

journalctl /usr/bin/sshd

Универсальная команда в независимости от имени службы:

journalctl -u "ssh*"

Для вывода событий, связанных с подключением пользователей, другой информации, в том числе отладочной (зависит от настройки уровня подробности сообщений), можно посмотреть следующим образом:

journalctl | grep -i ssh

Как увидеть неудачные попытки входа SSH

Если настроен вход по паролю, то для вывода неудачных попыток наберите команду:

journalctl | grep -i 'Failed password for'

Если настроен вход по публичному ключу, но не отключена возможность входа по паролю, то после неверного ключа, будет предоставлена возможности войти по паролю. Такие неудачные попытки входа по паролю можно найти такой же командой:

journalctl | grep -i 'Failed password for'

При неудачной попытке входа из-за неверного ключа, при уровне вербальности (LogLevel) по умолчанию (INFO) специальные сообщения не записываются в журнал. Подобные неудачные попытки можно обнаружить по записи «Connection closed by authenticating user», но она означает отключение на этапе аутентификации, независимо от способа аутентификации — по паролю или по ключу.

Если установить уровень вербальности на VERBOSE, то в журнале можно будет найти записи о неудачных попытках входа с помощью публичного ключа следующей командой:

journalctl | grep -i 'Failed publickey for'

Подробнее об этой настройке во второй часте.

Как просмотреть журнал подключений пользователей SSH

Чтобы показать подключения, когда вход был сделан по паролю:

journalctl | grep -i 'Accepted password for'

Чтобы показать подключения аутентификации по публичному ключу:

journalctl | grep -i 'Accepted publickey for'

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.