Visitors have accessed this post 504 times.

Протокол SSH

1
0
504
25 мая 2020 22:07
Автор: Rebrain Me
Linux

Visitors have accessed this post 504 times.

Протокол SSH (Secure SHell) — один из основных и очень важных инструментов работы с Linux (тут надо отметить, что он может использоваться и для других платформ — OpenBSD, Windows, macOS). SSH применяется для зашифрованного соединения сервера и клиента путем создания защищенного соединения на удаленном компьютере. Используется прежде всего для управления удаленным сервером или компьютером.

Прародителями современного варианта SSH стали протоколы удаленного доступа Telnet и RSH. И хотя их задача была также в удаленной передаче информации, у них был ряд недостатков Так, RSH передавал информацию в незашифрованном виде, а значит, ее легко можно было перехватить.

Появление SSH позволило решить эти проблемы. Первоначально протокол разрабатывался как закрытый коммерческие проект, но позже стал развиваться в рамках OpenBSD, благодаря чему и приобрел свое полное название — OpenSSH. Сейчас широко используется вторая версия, первая значительно уступает ей в плане безопасности и возможностей.

Конфигурационные файлы

В OpenSSH входит две компоненты — ssh, собственно, клиентская часть, и sshd (серверная).

Серверный файл конфигурации можно найти в директории /etc/ssh, где sshd_config — это основной файл демона sshd. В нем можно задавать параметры для работы в системе — например, для аутентификаций, какие ключи используются и т.д.

Со стороны клиента файлы конфигурации лежат в ~/.ssh/ssh_config. Давайте разберемся, для чего нам нужно это знать. Если вы регулярно подключаетесь к разным системам, вам приходится хранить в памяти большое количество информации — их IP-адреса, названия портов, имена пользователей. В конфигурационном файле вы как раз можете прописать параметры для подключения, а еще изменить имена на более простые и удобные. Или же просто хранить там все данные, необходимые для подключения.

Вот так выглядят данные в конфигурационном файле клиента:
Host dev
HostName dev.valera.ru
User valera
Port 4422

Если вы запустите клиент ssh командой ssh dev, она возьмет из файла данные для соединения для хоста dev. Для нашего примера:
ssh -p 4422 valera@dev.valera.ru

Аутентификация при помощи ключа

В SSH для безопасности используется принцип асимметричного шифрования. При нем для обработки данных, которые мы передаем, используются 2 типа криптографических ключей — публичный или открытый и приватный или закрытый. Приватный ключ доступен только 1 человеку (устройству), а публичный ключ используется для передачи на удаленные сервера, к которым мы хотим получить доступ.

Каким образом в SSH работает подтверждение личности пользователя? На сервер отправляется публичный ключ клиента и при помощи него шифруется случайная строка. Затем сервер запрашивает у аутентифицируемого клиента расшифровку. а сделать ее возможно только с использованием приватного ключа. После этого разрешается доступ на сервер.

При применении  ключей пароль для входа на сервер не нужен.

Открытый ключ можно найти в домашней директории пользователя ~/.ssh/authorized_keys. Чтобы сгенерировать ключи, используется команда:
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
ssh-keygen — это утилита для генерации ключей.

Помимо собственно генерации ключей она может использоваться для получения публичного ключа из приватного. Для этого используется запрос:
ssh-keygen -y -f $PATH_TO_PRIVATE_KEY;
Полученный публичный ключ нужно скопировать на сервер при помощи команды:
ssh-copy-id username@hostname
После ввода пароля ключ появится в конфигурационном файле.

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

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

Раз мы заговорили о безопасности, стоит сказать еще пару моментов, которые повышают безопасность протокола SSH. Для проверки сервера как устройства, к которому раньше уже производилось подключение, также используется ключ. В момент первого подключения у клиента сохраняется ключ сервера, он и нужен для подтверждения. Перечень всех хостов, к которым производилось подключение, можно найти в ~/.ssh/known_hosts.

Кроме того, весь трафик между хостами дополнительно шифруется синхронным алгоритмом шифрования.

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

OpenSSH для клиента вызывается из терминала командой ssh. Клиентский пакет OpenSSH также предоставляет другие утилиты SSH, такие как scp и sftp, которые устанавливаются вместе с командой ssh.

Для Linux

Большинство дистрибутивов уже включают SSH, так как SSH команды Linux администраторы используют достаточно широко. Если же его по каким-то причинам нет, используйте менеджер пакетов дистрибутива для установки.

Для Windows

В последних версия Windows 10 (не ниже версии 1809) уже есть клиент-серверная часть OpenSSH, для их установки используется графический интерфейс или PowerShell.
Чтобы установить OpenSSH, вам нужно выполнить следующие действия.

1. Найти имя пакета
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
2. В ответ вам вернется имя.
Name  : OpenSSH.Client~~~~0.0.2.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.2.0
State : NotPresent

3. Выполните установку.
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.2.0
Пример вывода при успешной установке:
Path          :
Online        : True
RestartNeeded : False

Для Debian и Ubuntu

Для установки используйте команду:
sudo apt update

sudo apt install openssh-client
Примечание. В ОС MacOS клиент OpenSSH предустановлен по умолчанию.

Основные ssh команды

Для работы с SSH должно быть выполнено несколько условий.

  • SSH запущен на удаленном компьютере, и в его файрволе открыт порт SSH.
  • У учетной записи настроена возможность удаленного входа, у вас есть данные по имени пользователя и паролю.

Основная команда ssh — ssh [OPTIONS] [USER@]:HOST

Для запуска в терминале нужно ввести команду и имя хоста, к которому подключаетесь:
ssh ssh.valera.ru
Если вы подключаетесь к хосту впервые, программа попросит подтвердить, что данное имя хоста нужно сохранить в ~/.ssh/known_hosts, и ввести пароль.

После ввода пароля вы сможете войти на удаленную машину.

Если вы не указываете имя пользователя, то будет использовано текущее имя. Для того чтобы войти под другим пользователем, вам нужно использовать следующую команду ssh username@hostname или определить имя пользователя аргументом -l:
ssh -l username hostname
Если вы не укажете порт, то по умолчанию для подключения будет использоваться 22 порт.

Чтобы изменить порт, используется опция -p:
ssh -p 7722 username@hostname

Переадресация SSH-портов

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

Типы переадресации SSH-портов:

  • Переадресация локальных портов
  • Переадресация удаленных портов
  • Динамическая переадресация

В первом случае соединение от хоста клиента переадресуется сперва на сервер SSH и только затем на хост назначения.

Для локальной переадресации портов используется аргумент -L:
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT username@hostname
В случае переадресации удаленных портов соединение от сервера переадресуется на хост клиента и затем уже на хост назначения.

Для нее также используется -L, но указывается удаленный порт:
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname
При динамической переадресации создается прокси-сервер SOCKS, через него осуществляется соединение нескольких портов.

Для его создания используется опция -D:
ssh -R [LOCAL_IP:]LOCAL_PORT  -N -f username@hostname
Утилита SSH — одна из самых важных в ОС Linux. Мы рассмотрели основные моменты, но, конечно, всегда можно «копать глубже». Если самостоятельное изучение Linux кажется вам слишком сложным и вы не знаете, с чего начать, рекомендуем посмотреть программу нашего практикума Linux by Rebrain.

Каждую неделю мы в live режиме решаем кейсы на наших открытых онлайн-практикумах, присоединяйтесь к нашему каналу в Телеграм, вся информация там.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

HighLoad архитектура для веб-приложения – все ли тут просто и однозначно?
array(1) { [0]=> object(WP_Term)#11149 (16) { ["term_id"]=> int(9) ["name"]=> string(8) "HighLoad" ["slug"]=> string(8) "highload" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(9) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(1) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(9) ["category_count"]=> int(1) ["category_description"]=> string(0) "" ["cat_name"]=> string(8) "HighLoad" ["category_nicename"]=> string(8) "highload" ["category_parent"]=> int(0) } } HighLoad

Тема высоких нагрузок будоражит умы не хуже тайны бермудского треугольника. Вроде все знают, что современные маркетплейсы, сайты объявлений, соцсети - это тот самый пресловутый HighLoad, но чего там, собственно, “под капотом” и как оно настраивается, - это уже совсем другой уровень абстракций.  

На hackernoon.com нам встретилась статья о...

0
0
9 октября 2020
Команда chmod — Linux
array(1) { [0]=> object(WP_Term)#924 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(23) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(23) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Chmod устанавливает права на чтение, запись и выполнение и является одной из наиболее важных команд безопасности в операционных системах на базе Linux.

У каждого объекта в вашей системе Linux есть режим выдачи прав, который описывает, какие действия пользователь может выполнять в системе. Существует три типа разрешений: на чтение (chmod r),...

0
0
27 мая 2020
30 инструментов мониторинга системы Linux, которые должен знать каждый сисадмин
array(1) { [0]=> object(WP_Term)#11150 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(23) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(23) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Ищете способы, как контролировать производительность сервера Linux? В большинстве дистрибутивов Linux уже встроены разные инструменты мониторинга. Используя их, можно посмотреть метрики с информацией о системных процессах. Эти инструменты можно использовать для поиска возможных причин возникновения проблем с производительностью. Команды, которые...

0
0
28 мая 2020