Настроить сервер для ssh

Установка и настройка сервера SSH в Linux

Secure Shell, т. е. SSH – протокол, обеспечивающий защищённые соединения и передачу данных между двумя удалёнными компьютерами. Изначально создавался на замену таким системам как rlogin и rcp. Как понятно из полного названия протокола, система SSH позволяет соединяться и управлять удалённым узлом (компьютером, маршрутизатором и т. д.), при этом защищая весь передаваемый трафик с помощью высоконадёжного шифрования.
SSH широко применяется администраторами серверов для их настройки и управления, да и обычные продвинутые пользователи — владельцы, например, сайтов или виртуальных серверов активно используют SSH для подключения к своей учётной записи на хостинге и использования командной оболочки сервера.
Сразу после окончания разработки система SSH стала активно трансформироваться в закрытый коммерческий продукт в виде версии SSH2. Но благодаря сообществу GNU версии протокола SSH1 и SSH2 были реализованы в виде открытого и свободно распространяемого ПО openSSH. В Linux-системах используется именно этот метапакет.
Метапакет SSH базово включает в себя сервер SSH (sshd) в качестве програмы-демона, а также несколько утилит: ssh – удаленная регистрация и выполнение команд, scp – передача файлов и ssh-keygen – для генерации пар SSH-ключей.

Установка пакетов SSH

Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
В Ubuntu

После чего начнется процесс установки

Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
$ systemctl status sshd
или:
$ service sshd status даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.

Настройка SSH

Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле /etc/ssh/sshd_config. Посмотреть его можно командой

В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress. Первый глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.
Примечание: для задания активации параметра необходимо раскомментировать соответствующую строку — убрать символ «#» в её начале.
Второй параметр задаёт семейство используемых IP-адресов — IPv4 и IPv6. Если, к примеру, используются только адреса IPv4, то очень рекомендуется установить для параметра

Для адресов семейства IPv6 используется значение inet6.
Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов:

Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: Protocol 2
Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:

Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл etc/.ssh/authorized_keys), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности:
AuthorizedKeysFile etc/ssh/authorized_keys # Для общего файла
AuthorizedKeysFile %h/.ssh/authorized_keys # Файл -> пользователь
Во втором варианте благодаря шаблону автоподстановки с маской «%h» будет использоваться домашний каталог пользователя.
Важно также отключать парольный доступ:

Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:

Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например:

Следует также отключать root-доступ:

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

Настройки для алиасов хранятся либо глобально в /etc/ssh/ssh_config, либо раздельно для пользователей в

Читайте также:  Смартфон самсунг как настроить смс

/.ssh/config. Здесь нужно не спутать с ssh_config! Пример:

Для применения сделанных настроек необходим перезапуск SSH-сервера:

Настройка и использование клиента SSH
Для подключения по к серверу используется команда:

где user_name – имя пользователя в системе, host_name – имя узла, к которому производится подключение, например:

При этом утилита ssh запросит (в зависимости от настроек сервера) логин, пароль или парольную фразу для разблокировки приватного ключа пользователя.
В случае авторизации по ключу, должна быть предварительно сгенерирована пара SSH-ключей — открытый, который хранится на стороне сервера, обычно в файле .ssh/authorized_keys в домашнем каталоге пользователя, и закрытый — используется для авторизации клиента и хранится, как правило, в каталоге .ssh/ домашней директории пользователя. Открытый ключ представляет собой «цифровой слепок» закрытого ключа благодаря которому сервер «знает», кто «свой», а кто «чужой».
Для генерации ключей используется утилита ssh-keygen:

Утилита предложит выбрать расположение ключей (лучше всё оставить по-умолчанию), обычно это каталог

/.ssh/, ввести парольную фразу для закрытого ключа. После чего будут сгенерированы открытый ключ id_rsa.pub и закрытый — id_rsa. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой:

Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления.
Важно заметить, что использование сгенерированных openSSH-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся openSSH-ключи в формат PPK. Удобнее всего это делать с помощью утилиты PuTTY – puttygen.exe.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Подключение к Windows по SSH с помощью встроенного OpenSSH

Начиная с Windows 10 1809 и Windows Server 2019 в операционной системе имеется встроенный SSH сервер, основанный на OpenSSH. В этой статье мы покажем, как установить и настроить OpenSSH сервер в Windows 10 и подключиться к нему удаленно по защищенному SSH протоколу (ну прям как в Linux 🙂 ).

Установка сервера OpenSSH в Windows

Рассмотрим, как установить компонент OpenSSH Server в Windows 10 1903 (Windows Server 2019 все выполняется аналогично).

Пакет OpenSSH (как и RSAT) уже включен в данные версии Windows в виде Feature on Demand (FoD).

При наличии прямого Интернет-подключения вы можете установить сервер OpenSSH с помощью PowerShell

Add-WindowsCapability -Online -Name OpenSSH.Server*

Или при помощи DISM:

dism /Online /Add-Capability /CapabilityName:OpenSSH.Server

В Windows 10 этот компонент также можно установить через панель Параметры (Приложения -> Управление дополнительными компонентами -> Добавить компонент). Найдите в списке Open SSH Server и нажмите кнопку Install).

Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like ‘OpenSSH.Ser*’

Настройка SSH сервера в Windows

После уставной сервера OpenSSH в Windows вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:

Set-Service -Name sshd -StartupType ‘Automatic’
Start-Service sshd

С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на 22 порту:

netstat -na| find «:22»

Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.

Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled

Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:

New-NetFirewallRule -Name sshd -DisplayName ‘OpenSSH Server (sshd)’ -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

По умолчанию важным компоненты OpenSSH хранятся в следующих каталогах:

  • Исполняемые файлы OpenSSH Server: C:\Windows\System32\OpenSSH\
  • Конфигурационный файл sshd_config (создается после первого запуска службы): C:\ProgramData\ssh
  • Журнал OpenSSH: C:\windows\system32\OpenSSH\logs\sshd.log
  • Файл authorized_keys и ключи: %USERPROFILE%\.ssh\

При установке OpenSSH сервера в системе создается новый локальный пользователь sshd.

Sshd_config: Конфигурационный файл сервера OpenSSH

Вы можете изменить настройки сервере OpenSSH в конфигурационном файле %programdata%\ssh\sshd_config.

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

Чтобы разрешить подключение только для определенной доменной группы:

Либо можете разрешить доступ для локальной группы:

Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.

Следующие директивы разрешают SSH доступ по ключам (доступ к Windows через SSH по ключам рассмотрим подробно в следующей статье) и по паролю:

Вы можете изменить порт, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.

Подключение к Windows 10 через SSH

Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (я использую putty, но можно пользоваться встроенным ssh клиентом Windows).

Читайте также:  Ikea планировщик кухни не работает

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

Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.

При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.

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

Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:

Чтобы изменить Shell по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:

New-ItemProperty -Path «HKLM:\SOFTWARE\OpenSSH» -Name DefaultShell -Value «C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe» -PropertyType String –Force

Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение PS C:\Users\admin> ).

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

Источник

Как настроить SSH с помощью ssh_config

Назначение ssh_config

В ежедневной работе системного администратора использование ssh-клиента (OpenSSH client) — обычная практика. Однако, прописывание длинных и сложных команд по конфигурированию параметров SSH вручную, в командной строке в терминале, отнимает у специалиста много лишнего времени. Начинающие администраторы, инженеры и пользователи Linux возможно не знакомы с таким простым и удобным способом настройки параметров SSH, как использование файла ssh_config.

В каких же случаях вам необходим ssh config? Представьте себе ситуацию, когда ваша задача — ежедневное подключение к нескольким удаленным серверам, причем с различными настройками (IP-адресом, логином и паролем, номерами портов и другими параметрами командной строки). Согласитесь, что вводить каждый раз все эти данные вручную — это нерациональная трата рабочего времени. Как же решить такую проблему? Одно из возможных решений — создание ssh bash alias (псевдонима) для каждого соединения с удаленным сервером. Однако, можно предложить более оптимальный вариант — создать файл конфигурации для каждого пользователя, в котором будут храниться различные параметры SSH для каждого удаленного хоста, к которому вы будете подключаться.

В данной статье мы рассмотрим настройку файла ssh_config только для клиента OpenSSH на локальной машине пользователя (не затрагивая установки на удаленном сервере).

Принцип работы ssh_config

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

  1. в опциях, задаваемых с помощью командной строки;
  2. в настройках файла конфигурации конкретного пользователя

/.ssh/ssh_config;

  • в общесистемном конфигурационном файле (для всех пользователей данного локального компьютера) /etc/ssh/ssh_config;
  • *Примечание: наибольший приоритет имеет командная строка, затем идет

    /.ssh/ssh_config и в последнюю очередь уже /etc/ssh/ssh_config.

    Покажем на простом примере, как создать и отредактировать под Ubuntu ssh config file для конкретного пользователя локальной машины.

    • Если файл ssh_config не создан, то необходимо его создать с помощью команды:
    • На следующем этапе нужно отредактировать данный файл
      в nano

      /.ssh/config таким образом:

    Где: Host — это alias (псевдоним) для нашего SSH-соединения, HostName — IP адрес VPS (или имя хоста, если включен DNS), Port — номер порта, User — имя пользователя.

    С помощью несложных настроек мы создали alias для нашего VPS на FREEhost.UA, таким образом, соединиться с нашим удаленным сервером можно будет с помощью простой команды в терминале:

    Ниже опишем, что означают параметры, используемые в ssh_config, а также дадим примеры типовых настроек.

    Параметры ssh_config

    Все параметры, которые вы сможете использовать в работе с файлом ssh_config можно посмотреть, выполнив команду:

    Для решения типовых задач в работе системного администратора советуем обратить внимание на следующие параметры настроек*:

    • Host — alias (псевдоним), произвольное наименование хоста.
    • HostName — IP адрес удаленного сервера или имя хоста (если настроен DNS).
    • Port — номер порта (если он нестандартный, по умолчанию используется порт 22).
    • User — имя пользователя.
    • IdentityFile — указывается путь к SSH-ключу, который используется для аутентификации при соединении с удаленным сервером (как правило, применяется в том случае, когда ключи не хранятся в директории «по умолчанию»).
    • IdentitiesOnly — сообщает клиенту SSH, какой именно ключ следует использовать для аутентификации на сервере (а не любые ключи, которые находятся в папке для ключей «по умолчанию»). В некоторых случаях может использоваться вместе с параметром IdentityFile, если этот параметр прописан в файле ssh_config, то будут проверены все ключи, даже те, которые пользователь введет в командной строке.
    • ServerAliveInterval и ServerAliveCountMax — ssh-клиент будет запрашивать ответ от удаленного хоста, даже если он не получает никаких данных в указанный интервал времени. Эти параметры помогут предотвратить сбрасывание соединения по причине отсутствия активности.
    • CertificateFile — используется опционально, совместно с параметром IdentityFile для точного указания сертификата, который необходимо предоставить для аутентификации.
    • PreferredAuthentications — параметр, который устанавливает в каком порядке будут использоваться методы аутентификации (по умолчанию: gssapi-with-mic, hostbased аутентификация, аутентификация на базе SSH-ключей, keyboard-interactive и вход по паролю).
    • SetEnv и SendEnv — эти параметры разрешают ssh-клиенту передавать локальные переменные среды на указанный удаленный хост, при этом сервер должен быть настроен для приема этих переменных. Для этого системный администратор должен на удаленном сервере в файле /etc/ssh/sshd_config установить значение Yes для параметра AcceptEnv.
    • HostKeyAlias — клиенту SSH дается указание использовать псевдоним ключа (key alias) из файла

    /.ssh/known_hosts вместо HostName. Данный параметр будет полезен для хостов с динамическими IP-адресами.

  • ProxyJump — с помощью этой опции можно организовать SSH Jump Server (jump host или bastion host), используя флаг –J при написании команды.
  • ForwardAgent и AddKeysToAgent — эта опция служит для организации безопасного проброса ключа (agent forwarding), позволяет осуществить доступ удаленного хоста к локальному SSH-агенту пользователя.
  • *Примечание: ниже покажем на примерах, как использовать данные опции в файле ssh_config.

    Примеры файлов ssh_config для организации доступа к серверам по SSH

    Пример файла ssh_config с применением метода аутентификации на основе SSH-ключей

    В примере файла приведена директория для пользователя root на локальной машине, в которой хранится SSH-ключ (при написании файла, вы можете подставить свои данные). Также в этом примере покажем, как создавать несколько псевдонимов в ssh_config для соединения по SSH к различным серверам (в первом случае — это наш сервер на FREEhost.UA, во втором случае — это сервер базы данных).

    *Примечание: Как создать пару SSH-ключей под Linux подробно описано в статье на нашем сайте FREEhost.UA

    Решение проблемы подвисшей SSH-сессии

    Приведем еще один пример файла ssh_config, но уже с использованием параметров ServerAliveInterval, ServerAliveCountMax и PreferredAuthentications (в данном примере выбран метод аутентификации publickey, т.е. с использованием SSH-ключей):

    Иногда сессии SSH могут зависать по причине проблем с качеством связи и по др. причинам. Что происходит в данном случае? SSH начнет проверять соединение, выполняя отправку запросов echo на удаленный сервер в течении определенных промежутков времени. За это отвечает параметр ServerAliveInterval. Если же без ответа останется больше запросов, чем задано в параметре ServerAliveCountMax, то SSH закроет данное соединение.

    Организация SSH Jump Server

    SSH Jump Server — это сервер под управлением ОС Линукс, единственный в корпоративной сети компании, доступный из сети Интернет. Такой сервер применяется как шлюз в частной сети для получения доступа к другим компьютерам под Linux, используя SSH. Bastion host — единственный шлюз, через который можно получить доступ к ИТ-инфраструктуре компании. Это очень действенная мера в плане обеспечения кибербезопасности и защиты от атак злоумышленников. Для системного администратора наличие Jump host в корпоративной сети существенно упрощает ведение учета всех SSH-соединений. С помощью командной строки эту функцию можно реализовать, используя флаг –J.

    Например, если вы имеете доступ к «бастиону» bastion.server.ua, то вы получаете возможность доступа к другим серверам в локальной сети организации, которые расположены за NAT, для этого нужно применить флаг -J в командной строке:

    где 10.200.36.150 — это IP адрес станции в локальной сети, к которой вы планируете подключение.

    Однако, вместо ввода команды в терминале проще сразу прописать данную функцию в файле ssh_config:

    Когда администратор введет команду ssh 10.200.36.150 в терминале, SSH-клиент установит соединение c bastion.server.ua, в результате чего, оно будет перенаправлено на IP 10.200.36.150 в локальной сети. Конечно же, мы показали самый простой пример использования опции ProxyJump в ssh_config, для более серьезных решений необходимо еще провести дополнительные настройки на удаленном сервере, но эта тема уже для отдельной статьи про Jump host.

    Заключение

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

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

    Источник

    Оцените статью