Ssh sshd чем отличаются

Обновлено: 04.07.2024

1. Общие[сопутствующие]-вопросы

1.2 Куда я могу послать вопросы, поправки и тд, по этому документу?

2. Основы Ssh.

2.1 Что такое ssh?

Ssh (Secure Shell) это программа для входа в другие компьютеры доступные по сети, для выполнения команд или программ на удаленных компьютерах и для передачи файлов с одного компьютера на другой. Она обеспечивает строгую проверку подлинности и безопасности соединений по незащищенным каналам. И используется как замена rlogin, rsh, и rcp.

Дополнительно, ssh обеспечивает безопасность X-овых соединений и безопасное перенаправление иных, необходимых вам TCP соединений.

2.2 Почему желательно использовать ssh?

Традиционные BSD 'r' - команды (rsh, rlogin, rcp) уязвимы для различных видов хакерских атак. Кроме того, если кто-то имеет "привелигерованный"[root] доступ к машинам сети или возможность физического подключения к сетевым коммуникациям, то это позволит собирать весь проходящий траффик, как входной, так и выходной включая пароли, поскольку TCP/IP является "чистым" протоколом (ssh никогда не посылает пароли в чистом виде).

X Window System имеет тоже достаточное количество "узких" мест в плане безопасности. Но с помощью ssh можно создавать безопасные удаленные X-овые сеансы, которые будут также прозрачны для пользователя как и раньше. Сторонний - косвенный эффект использования ssh при запуске удаленных X-овых клиентских приложений это еще большая простота для пользователя.

При этом можно как и прежде использовать настройки в старых файлах .rhosts и /etc/hosts.equiv , ssh прекрасно их понимает. А если удаленная машина не поддерживает ssh, то сработает "обратный механизм" возврата к rsh, который включен в ssh.

2.3 От каких видов атак ssh защищает?

  • "IP spoofing'а"[ip-подмены], когда удаленный[атакующий] компьютер высылает свои пакеты симулируя якобы они пришли с другого компьютера, с которого разрешен доступ. Ssh защищает от подмены даже в локальной сети, когда кто-то например, решил подменить ваш роутер наружу "собой".
  • "IP source routing"[ip исходный маршрутизатор], когда компьютер может симулировать что IP-пакеты приходят от другого, разрешенного компьютера.
  • "DNS spoofing", когда атакующий фальсифицирует записи "name server'а"
  • Прослушивания нешифрованных паролей и других данных промежуточными компьютерами.
  • Манипуляций над вашими данными людьми управляющими промежуточными компьютерами.
  • Атак основанных на прослушивании "X authentication data" и подлога соединения к X11 серверу.

Все вышесказанное ВЕРНО лишь при использовании шифрования. Однако Ssh имеет опцию шифрования "none", которая необходима лишь для отладки и ни в коем случае не должна быть использована для обычной работы.

Ssh не поможет вам в случае нарушения безопасности вашей машины другими методами. Например, если хакер взломал вашу машину или получил привелигированный-root доступ ИЗНУТРИ, что позволит ему "извратить-перевернуть" и работу ssh тоже.

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

2.5 Как он работает?

2.5.1 SSH версия 1.2.x.

Для более обширной информации, прочтите пожалуйста RFC и файл README README из дистрибутива SSH.

Все коммуникации шифруются с использованием метода IDEA или любым на выбор из следующих: three-key triple-DES, DES, Blowfish. Для обмена ключей шифрования используется RSA метод, данные обмена уничтожаются каждый час(ключи нигде не сохраняются).Каждая машина имеет свой RSA-ключ который используется для проверки достоверности машины при задействии метода "RSA host authentication". Шифрование используетс для предотвращения "IP-Spoofing"; проверка достоверности публичных ключей против "DNS и Routing Spoofing".

RSA-ключи используются для проверки достоверности компьютеров.

2.5.2 SSH версия 2.x (ssh2).

3.1 Какая последняя версия ssh?

Последние оффициальные реализации на данный момент - 1.2.27(ssh1) и 2.0.13(ssh2).

В настоящий момент Ssh работает на Unix-based платформах. И успешно портирован на все "ведущие" Unix ситемы.

3.2 Могу ли я законно использовать ssh?

Реализацию ssh-1.2.27 для OS Unix можно свободно использовать в некоммерческих целях и нельзя продавать как отдельный продукт или часть большого продукта или проекта, иными словами нельзя использовать SSH для извлечения финансовой выгоды без приобретения сепциальной[отдельной] лицензии. Определение "коммерческое использование" в отношении ssh следует воспринимать как извлечение финансовойвыгоды из чего-либо, как например использование ssh для входа на компьютеры заказчика с целью их удаленного администрирования или например, использование в целях безопасного входа к партнерам, продавцам и тд и тп связанных прямо или косвенно коммерческими интересами.

В ходе переписки между "Data Fellows" и ведущим этого FAQ'а были заданы следующие вопросы и соответственно получены ответы:

S: Steve Acheson, FAQ Maintainer
P: Petri Nyman, F-Secure SSH Product Manager for Data Fellows

S>Can a company use the 1.2.26 release of the SSH software freely for
S>internal support and administration without violating the license
S>agreement?
перевод
S>Может ли компания свободно использовать 1.2.26 реализацию SSH
S>в целях внутренней поддержки и администрирования не нарушая при этом
S>соглашения о лицензировании?

P>You can freely use it for internal support and administration of your own
P>equipment located in your premises.
перевод
P>Вы лично можете свободно использовать для внутренней поддержки и
P>администрирования вашего собственного оборудования находящегося
P>в вашей собственности.

S>Does connecting from one machine to another via SSH to
S>read email, do work, etc, violate this agreement?
перевод
S>Нарушает ли соглашение соединение с одной машины на другу по SSH
S>для чтения почты, выполнения работы и тд и тп?

P>No, unless you provide this ability to a third party or connect to a third
P>party's computer to provide a service.
перевод
P>Нет, в том случае если если вы для использования этих сервисов соединяетесь
P>с компьютерами _третьей_стороны_ или предоставляете сервис _третьей_стороне_.

S>Does connecting from a purchased PC client SSH software to a non-licensed
S>SSH server violate the agreement?
перевод
S>Нарушается ли соглашение если соединение установлено между клиентом
S>SSH имеющим лицензию и нелицензированным SSH сервером?

S>Does connecting to a remote site, that is not company owned, but company
S>administered, via SSH to do administrative work violate the agreement?
перевод
S>Нарушается ли соглашение если устанавливается соединение с компьютером не принадлежащим
S>компании, но ею администрируется, с целью проведения административных работ.

P>Yes. You need a commercial license for that.
перевод
P>Да. Для таких целей необходимо приобрести лицензию.

Unix версии ssh 2.0.13 могут быть использованы ТОЛЬКО в случае персонального использования или в целях обучения (см. license agreement). В случае коммерческого использования необходимо купить лицензию у Data Fellows.

Более ранние версии ssh имеют менее ограниченную лицензию; читайте об этом в файле COPYING сопровождающем дистрибутив каждой версии.

В некоторых странах, особенно Франции, России, Ираке и Пакистане, вовсе запрещено использование шифрования без особого на то разрешения.

Если находитесь в USA, то должны осозновать что любая попытка экспортировать ssh за пределы штатов будет рассматриваться как уголовно-наказуемая, сюда же относится и попытка размещения на ftp серверах находящихся за пределами USA, не взирая на то что сам SSH был написан за пределами USA и с использованием лишь свободно доступных материалов. Для получения более полной информации обращайтесь в ведомство "Defence Trade Controls".

Алгоритмы RSA и IDEA, которые используются в ssh, имею самостоятельные патентные права в разных странах, включая US. Вместо них можно воспользоваться библиотекой RSAREF, однако законность использования в некомерческих целях ssh в US в таком случае, может восприниматься двояко. Вам может понадобиться приобретение лицензии для коммерческого использования IDEA; однако ssh будет прекрасно работать будучи сконфигурирован и без него.

Для более подробной информации читайте файл COPYING из дистрибутива ssh.

3.3 Что можно сказать о коммерческом использовании ssh?

Некомерческое использование версии ssh 1.2.x было совершенно свободно в Unix среде и почти определенно останется таковым в будущем.

Использование версии ssh 2.x было существенно ограничено.

3.4 Где можно взять ssh?

3.5 Как установить ssh?

Возьмите файл дистрибутива с ближайшего к вам зеркала, затем распакуйте его после чего перейдите в директорию ssh-1.2.27, прочитайте файл INSTALL, и следуя рекомендациям установите SSH.

3.6 Может ли установить ssh "непривелигированный" пользователь в OS Unix?

Если вы запустили сервер - sshd, как пользователь отличный от root, вы получите доступ - login только для того пользователя от которого был запущен сам sshd.

Если вы установили клиентскую часть без setuid root, то это не помешает вам соединяться и входить на удаленные сервера, НО вы не сможете использовать форму .rhosts проверки подлинности входящего.

Вы можете запустить sshd из под своего account'а применив опцию -p для использования ssh на непривелигерованном порту (>1024), чтобы иметь возможность соединения с других машин по заданному порту ssh -p. Данный метод, как было замечено выше, позволяет производить соединения только под тем пользователем, под которым был запущен собственно sshd, и как правило демон не перестартует после перезагрузки машины.

Вы сами должны решать какой метод использовать в зависимости от ситуации.

3.7 Где можно получить помощь?

Автор этого опуса тоже имеет несколько статей об SSH опубликованных в Sunworld журнале.

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

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

  • Безопасные команды доступа к хосту. SSH дает возможность выполнять безопасные команды доступа к хосту, такие как ssh (удаленная оболочка), slogin (удаленный вход в систему), scp (удаленное копирование);
  • X11 Forwarding. SSH предоставляет встроенный механизм для выполнения удаленных клиентов X Window.
  • Port forwarding. SSH может выполнять переадресацию портов, передавая трафик c одного порта одной машины на другой порт другой машины. При этом передаваемый трафик шифруется;

Безопасность протокола достигается использованием нескольких решений, которые сводят к минимуму риск использования соединения:

  • Шифрование соединение, которое может выполняться одним из методов, выбранных в процессе переговоров. Шифрованное соединение не позволяет просто перехватить и использовать трафик. Выбор алгоритма шифрования делает систему более гибкой, позволяя не использовать алгоритмы, в которых обнаружены слабые места или которые не может поддерживать одна из сторон;
  • Аутентификация сервера выполняется при любом соединении. Это не позволяет выполнить подмену сервера или подмену трафика;
  • Аутентификация клиента может выполняться одним из нескольких доступных способов. Это с одной стороны может повысить надежность аутентификации, с другой -- делает систему более гибкой и упрощает ее использование;
  • Проверка целостности пакетов позволяет отследить любые незаконные изменения в трафике соединения. При обнаружении таких изменений, соединение немедленно разрывается;
  • Временные параметры аутентификации не позволяют воспользоваться данными соединения в том, случае, если спустя некоторое время после перехвата оно все-таки было расшифровано. Устаревание обычно происходит через час;

Аутентификация сервера по протоколу SSH выполняется при помощи инфраструктуры открытых ключей. Открытый ключ сервера клиент получает при первом соединении с ним.

ssh защищает от

  • Подмены IP-адресов (IP-spoofing), когда удаленный хост посылает пакеты от имени другого хоста;
  • Подмены DNS-записей (DNS-spoofing), когда изменяется запись на сервере DNS и в результате соединение устанавливается не с желаемым хостом, а с тем, на который указывает новая запись;
  • Перехвата открытых паролей и прочих данных, которые передаются в открытом виде и любой, кто имеет физический доступ к каналу, может их узнать.

Методы аутентификации клиентов, которые использует SSH:

  • Host-based аутентификация
  • Аутентификация с помощью открытых ключей
  • Kerberos-аутентификация
  • Парольная аутентификация.

По хостам. Метод аналогичный используемому в r-командах. В том случае, если соединение устанавливается с привилегированного порта, и файл .rhosts позволяет вход в систему, он разрешается. Этот метод является потенциально небезопасным, рекомендуется не использовать его. Для повышения уровня своей безопасности метод может быть дополнен RSA-аутентификацией клиентского хоста.

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

Керберос. Аутентификация проводится по схеме v5 Kerberos.

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

Как и в любом сетевом взаимодействии, в SSH-соединении участвуют две стороны: клиент и сервер. Сервер SSH реализован в виде программы sshd.

Сервер sshd является независимой программой, поэтому его запуск нужно производить во время загрузки компьютера стартовыми скриптами. То есть, вызов sshd либо должен осуществляться явно одним из rc-скриптов, либо ссылки на скрипт запуска следует включить в иерархию /etc/rc?.d/.

Для того чтобы сервер sshd автоматически стартовал при запуске компьютера, необходимо добавить его вызов в скрипты загрузки.

Будучи запущенным, демон работает в фоновом режиме и обрабатывает все входящие запросы по порту 22. Для каждого соединения создается новая копия демона, который занимается только его обслуживанием.

Конфигурация демона определяется файлом /etc/ssh/sshd_config. Он представляет собой набор действующих строк, пустых строк и строк-комментариев. Действующие строки файла содержат название параметра и его значение. Например, строка

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

  • Адреса. Интерфейс и порт, к которым привязан демон;
  • Журнализация. Опции, определяющие то, какая именно информация о работе демона должна регистрироваться и заноситься в журналы системы;
  • Управление ключами. Информация о том, в каких файлах находятся ключи, участвующие в аутентификации.
  • Аутентификация. Допустимые схемы аутентификации.
  • Дополнительные параметры. Опции, управляющие дополнительными функциями SSH, такими как переадресация портов, переадресация X11 и другие

Некоторые конфигурационные параметры могут быть переопределены опциями командной строки при вызове sshd.

Конфигурационный файл /etc/ssh/sshd_config.

  • [ssh.1] Номер порта на котором демон sshd будет вести прослушивание. Стандартный порт -- 22.
  • [ssh.2] Файлы с закрытыми ключами, использующимися для аутентификации хоста.
  • [ssh.3] Длина ключа сервера. Минимальная 512. По умолчанию 768
  • [ssh.4] Информация о том, с каким приоритетом и с каким средством данные записываются в системный журнал Syslog.
  • [ssh.5] Разрывать соединение, если пользователь не вошел в систему в течение 600 секунд. Разрешать суперпользователю root удаленно регистрироваться в системе. Разрешать вход в систему, даже если права доступа к каталогу пользователя, разрешают всеобщий доступ на чтение и запись.
  • [ssh.6] Все виды аутентификации разрешены. Аутентификация, основывающаяся на .rhost запрещена.
  • [ssh.7] Пустые пароли запрещены.

Программа ssh предназначена для регистрации на удаленном хосте с использование протокола ssh и удаленного выполнения команд. Кроме того ssh позволяет выполнять туннелирование любых TCP-соединений внутри ssh-канала (port forwarding).

Синтаксис программы ssh:

ssh опции хост пользователь@хост команда

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

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

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

Некоторые опции командной строки программы ssh

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

Более сложный пример использования ssh, который может быть полезен для удаленного резервного копирования. Команда выполняет резервное копирование каталога /var компьютера cpu на компьютер hold в файл /backup/cpu.дата. Здесь дата -- текущая дата, выдаваемая командой date +"%d%m%Y".

С текущего компьютера на компьютере cpu от имени пользователя backuper выполняется команда

find выдает список файлов, которые изменились со времени создания последней резервной копии (времени модификации /var/.last.bakup). Все эти файлы программой cpio помещаются в один файл, который записывается на удаленную машину hold в каталог /backup/cpu. Программа cpio для передачи файла также использует ssh, хотя это и не указывается явно. После того, как резервное копирование выполнено, обновляется время модификации файла /var/.last.backup

Секретные ключи хранятся в файлах identity, id_dsa и id_rsa в локальном каталоге

/.ssh (разные файлы для разных алгоритмов шифрования). Открытые ключи должны быть в файлах authorized_keys и authorized_keys2 в каталоге

/.ssh на удаленном компьютере, на котором производится регистрация. В качестве домашнего рассматривается каталог пользователя, под именем которого выполняется регистрация. Файл authorized_keys используется для хранения открытых ключей для SSH1, а в authorized_keys2 — для SSH2.

ssh дает возможность использования одного из трех различных алгоритмов асимметричного шифрования RSA или DSA.

Типы ключей

  • rsa1 -- Тип ключа RSA1, используемый в SSH версии 1
  • rsa -- Тип ключа RSA, используемый в SSH версии 2
  • dsa -- Тип ключа DSA, используемый в SSH версии 2


Для создания, преобразования и управления ключами аутентификации используется утилита ssh-keygen. Синтаксис программы:

ssh-keygen опции

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

/.ssh/id_dsa), а открытый в

Сгенерированный секретный ключ защищается при помощи парольной фразы (passphrase), которую нужно обязательно знать, для того чтобы воспользоваться ключом. Секретная фраза вводится в момент генерирования ключей. Она может быть затем изменена, без повторного копирования ключей.

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

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

Аналогично для второй версии SSH:

или воспользоваться утилитой ssh-copy-id

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

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

Некоторые опции командной строки программы ssh-keygen

  • -t тип -- Тип генерируемого ключа. Допустимые типы: rsa, rsa1 и dsa.
  • -p -- Изменить парольную фразу
  • -l -- Показать отпечаток (fingerprint) секретного ключа

Для каждого открытого ключа в файлах

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

  • from="список-шаблонов-через-запятую" - разрешает принимать соединения только с хостов, удовлетворяющих одному из шаблонов. В качестве шаблонов поддерживаются символы - ?, * и !
  • command="команда" - при аутентификации по данному ключу разрешается запускать только указанную команду, а не то что указано пользователем - например, "echo this key disabled" или "dump -params" и обязательно использовать опцию no-pty для бинарной передачи данных
  • no-port-forwarding - запретить port-forwarding
  • no-X11-forwarding - запретить X11
  • no-user-rc - Запрещает выполнение файла

Пара примеров: первый - разрешается логин по ключу только с определенной подсети, за исключением хоста 192.168.1.2. второй - при логине выполняется дамп домашнего каталога, для примера указано как выставлять несколько опций одновременно (через запятую)

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

Синтаксис программы scp:

scp опции пользователь@хост1:файл1. пользователь@хост2:файл2

Команда устанавливает защищенное соединение между хостом1 и хостом2 и копирует файл1 хоста1 в файл2 хоста2. Любой из хостов может быть локальным. Если имя хоста не указано, подразумевается локальный хост.

Синтаксис использования команды scp напоминает синтаксис cp. Она так же обрабатывает большое количество аргументов, использует аналогичные ключи для рекурсивного копирования, для копирования атрибутов и т.д.

Опции программы scp

  • -r -- Выполнить рекурсивное копирование каталогов
  • -p -- Сохранить по возможности атрибуты файлов (права доступа, время модификации, время доступа) при копировании
  • -C -- Выполнять сжатие файлов при передаче
  • -Pпорт -- Соединяться с удаленным компьютером по порту порт
  • -v -- Сообщать отладочную информацию о ходе SSH-соединения
  • -q -- Не выдавать индикатор прогресса

Например с удаленного хоста source на локальный хост dest нужно скопировать домашний каталог пользователя batman. Команда выполняющая копирование будет выглядеть так:

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



SFTP (SSH File Transfer Protocol) — SSH-протокол для передачи файлов. Он предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, и используется протокол SSH2, но это не обязательно.

SFTP-сервер встроен в OpenSSH. Он реализуется с помощью программы sftp-server. SFTP-клиент sftp встроен в пакет OpenSSH. В качестве SFTP-клиента для Windows может использоваться WinSCP или PSFTP из пакета PuTTY.

У SSH есть возможность, известная как перенаправление портов (port forwarding), которая позволяет передавать по SSH-соединению данные других протоколов. Перенаправление портов позволяет передать подключение, сделанное на одном конце SSH-соединения передать на другой конец и продолжить сеанс связи оттуда.

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

Типичная задача, которая может решаться с помощью перенаправление TCP, это доступ к внутреннему серверу сети снаружи, через шлюз. Представьте, что у вас есть сеть, которая находится за UNIX-шлюзом, смотрящим в Интернет. У вас есть доступ к этому шлюзу по SSH. Вы находитесь в Интернете и хотите попасть на один из внутренних серверов сети, не имеет значения по какому протоколу, но пусть, например, по протоколу RDP. Возможности открыть порт при помощи трансляции адресов у вас на сервере нет (например, потому что у вас там нет прав root'а, а есть только доступ к оболочке).

Для решения такой задачи прекрасно подойдёт перенаправление TCP-порта с помощью SSH. Вы создаёте SSH-соединение на шлюз, внутри которого будет передавать трафик будущего соединения. Вы просите ssh выполнить перенаправление портов, в результате чего он открывает на прослушивание какой-либо локальный порт, обращение на который передаётся SSH-серверу на шлюз, который в свою очередь передаёт его серверу-получателю, то есть на RDP-сервер (причём делает это от своего имени; обратный адрес IP-пакетов будет адресом сервера).

Трафик внутри SSH-туннеля шифруется, поэтому перенапраление портов может быть очень полезным для шифрования данных незащищённых протоколов, например, POP3, или создания небольших виртуальных сетей. С другой стороны, нужно иметь в виду, что с помощью перенаправления портов легко организовать доступ изнутри сети наружу или наоборот, и не забывать об этом особенно при выделении учётных записей с доступом к облочке (по-русски говоря, шелла) на шлюзе (по сути, это равносильно предоставлению доступа ко внутренней сети снаружи).

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

Различают два вида перенаправления портов:

  • Локальное. Клиент принимает подключение и посылает запрос на инициирование соединения SSH-серверу, который в свою очередь устанавливает незащищённое соединение с адресатом;
  • Удаленное. Сервер принимает подключение и посылает запрос на инициирование соединения SSH-клиенту.

Фактически два этих режима отличаются только тем, с какой стороны будет инициироваться соединение: со стороны клиента или со стороны сервера.

Этичный хакинг и тестирование на проникновение, информационная безопасность

Оглавление

Что такое и для чего нужен 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, который содержит и клиентскую, и серверную часть.

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

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

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

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

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

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

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

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

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

sudo systemctl start sshd.socket

sudo systemctl enable sshd.socket

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

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

systemctl status sshd.socket


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Другой вариант просмотреть историю входов, это использовать следующую команду:

Что такое протокол SSH

Иными словами, SSH — это дистанционная командная строка. Визуально вы работаете на своем компьютере, но в реальности — на другом.

Что значит «протокол»?

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

Что значит «защищенный»?

Для чего нужен SSH?

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

Как подключаться по SSH?

Для подключения к удаленной машине по SSH нужен клиент — специальная программа. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, и достаточно открыть терминал. В Windows нужно скачать сторонний клиент, например, Putty.

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

Например, для подключения к серверу 52.307.149.244 в аккаунт ivan нужно ввести:

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

В графическом клиенте вроде Putty нужно ввести ту же информацию в соответствующие поля:

Putty - стартовая страница

Fingerprint

Введите yes в первый раз.

Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов — fingerprint («отпечатки пальцев»). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Если кто-то переустановит SSH-сервер, или всю операционную систему, или вообще заменит удаленный компьютер, сохранив его адрес, то при следующем соединении вы узнаете об этом, потому что изменится fingerprint.

Подключение по SSH по паролю

Простейший вариант — подключение по паролю. После ввода команды ssh система запросит пароль:

Пароль придется вводить каждый раз.

Подключение по SSH по ключу, без пароля

Для удобного подключения по SSH (и многим другим сервисам) без ввода пароля можно использовать ключи.

Нужно создать пару ключей: приватный (закрытый) ключ и публичный (открытый) ключ. Приватный ключ нужно хранить и никогда никому не показывать. Публичный ключ можно показывать всем и распространять свободно.

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

Создадим пару ключей:

Программа запустится и спросит, куда сохранять ключи:

Нажмите Enter для сохранения в стандартное место — директорию .ssh/id_rsa в вашей домашней директории.

Программа запросит passphrase. Это вроде пароля для ключа. Можно просто нажать Enter и пропустить этот шаг. Или ввести passphrase — тогда его нужно будет вводить каждый раз, когда используется ключ.

Теперь у вас есть два файла:

В Windows можно использовать ssh-gen в подсистеме Ubuntu for Windows или в командной строке Git for Windows. Или создавать ключи графической утилитой вроде PuTTYgen.

Загрузка публичного ключа на сервер

Нужно добавить публичный ключ на сервер в файл

/.ssh/authorized_keys . Самый простой способ — запустить на локальной машине команду для копирования ключа:

Другой способ — подключиться по паролю, открыть в редакторе файл

/.ssh/authorized_keys и добавить в конец текст из вашего файла

Теперь при подключении пароль запрашиваться не будет 1 .

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

ssh-agent

При работе с ключами возможны две неудобные ситуации:

  1. Если при создании ключа вы указали passphrase (пароль для ключа), то вам придется вводить пароль при каждом подключении.
  2. Если у вас есть несколько ключей для разных целей, то при соединении по ssh придется указывать нужный ключ вручную

ssh-agent решает эти проблемы. Этот агент аутентификации (authentication agent) работает на фоне в *nix-системах. В зависимости от системы, вам, возможно, придется установить и настроить его автозапуск самостоятельно.

Если добавить ключ к агенту, то:

  1. для него больше не будет спрашиваться passphrase
  2. не нужно будет вводить ключ вручную — он будет автоматически использован при соответствующем подключении

ssh-add /home/demo/.ssh/id_rsa добавит ключ id_rsa в запущенный в системе агент. Если у него есть passphrase, то агент попросит ввести его.

Если запустить ssh-add без аргументов, то будут добавлены ключи

Список добавленных в агент ключей можно посмотреть командой ssh-add -L :

ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.

Форвардинг (проброс) ключей

Если вы подключились к удаленному серверу X, и с него хотите подключиться к другому серверу Y, например, чтобы сделать git pull с GitHub’а, то придется держать копию ваших ключей на сервере X.

Утилита ssh с флагом -A позволяет «пробросить» ключи с подключаемой машины в удаленную:

Ключи, добавленные к агенту аутентификации (ssh-agent) станут доступными на удаленном сервере. При этом файлы-ключи физически не будут находиться на сервере.

Частые вопросы

Чем Telnet отличается от SSH?

Telnet это конкретная программа с графическим интерфейсом, с помощью которой можно соединяться по SSH. Обычно ей пользуются только Windows пользователи, в Linux и MacOS используют консольную утилиту ssh.

Я настраиваю сервер LAMP и хочу использовать SSH. Я видел команду для sudo apt-get install ssh и задавался вопросом, было ли это то же самое, что и openssh?

Если бы я сейчас должен был выполнить apt-get install openssh, у меня были бы две разные версии ssh на моей машине?

1 ответ

Хорошо. просто: давайте спросим менеджера пакетов aptitude search ssh , Вы получите довольно большой результат, но я выберу несколько для вас:

Это мой рабочий стол, и у него нет ssh-сервера. У него есть клиент. Видишь первое письмо? Здесь вы видите три разных: i , p а также v , Они стоят за installed , purged а также virtual , Установлено очевидно, программа есть. purged означает не установлен, если вы полностью удаляете программу, она называется очисткой, и это неотличимо от программы, которая никогда не была установлена. Наконец, есть virtual , Это не настоящие пакеты, но они указывают на один или несколько пакетов, которые нужно установить.

Как вы можете видеть в описании ssh это обычный пакет, который установит клиент и сервер. Давайте спросим менеджера пакетов, что именно это означает: aptitude show ssh , который даст вам:

Описание довольно простое, но вы можете собрать из него больше информации, чем просто описание. Есть строка, начинающаяся с Depends , Это означает, что "для установки этого пакета должны быть также установлены следующие пакеты". Теперь посмотрите на это: он устанавливает и openssh-клиент, и openssh-сервер.

Так в чем же разница? aptitude install openssh-server установит только и только openssh-server , aptitude install ssh оба установят openssh-server а также openssh-client , но если у вас нет очень странной конфигурации, вы почти наверняка уже openssh-client ,

Так практически? Там нет разницы. но вы должны узнать кое-что о пакетах сегодня.

Есть небольшая разница в пакетах, которые будут установлены в ванильных системах:

Если вы установите ssh вы получите дополнительный пакет под названием openssh-sftp-server . Этот пакет вам не нужен и предназначен для обратной совместимости в соответствии с:

И sftp-server, и internal-sftp являются частью OpenSSH. sftp-server - это отдельный двоичный файл. internal-sftp - это просто ключевое слово конфигурации, которое сообщает sshd использовать код SFTP-сервера, встроенный в sshd, вместо запуска другого процесса (обычно sftp-server).

Внутренний sftp был добавлен намного позже (OpenSSH 4.9p1 в 2008 году?), Чем отдельный двоичный файл sftp-server, но сейчас он используется по умолчанию. sftp-server теперь избыточен и сохранен для обратной совместимости.

Я считаю, что нет причин использовать sftp-сервер для новых установок.

sshd мой проект недели, и я заметил, что большинство веб-сайтов говорят, что используют sudo apt install openssh-server . Прочитав ответ выше, я сделаю это сейчас. Просто отправьте этот ответ для других, которым интересно то же самое, что и OP и я.

Читайте также: