- Установка и настройка сервера SSH в Linux
- Установка пакетов SSH
- Настройка SSH
- Подключение к Windows по SSH с помощью встроенного OpenSSH
- Установка сервера OpenSSH в Windows
- Настройка SSH сервера в Windows
- Sshd_config: Конфигурационный файл сервера OpenSSH
- Подключение к Windows 10 через SSH
- Как настроить SSH с помощью ssh_config
- Назначение ssh_config
- Принцип работы ssh_config
- Параметры ssh_config
- Примеры файлов ssh_config для организации доступа к серверам по SSH
- Пример файла ssh_config с применением метода аутентификации на основе SSH-ключей
- Решение проблемы подвисшей SSH-сессии
- Организация SSH Jump Server
- Заключение
Установка и настройка сервера 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).
При первом подключении появится стандартный запрос на добавление узла в список известных 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 соединения можно прописать с помощью трех указанных ниже способов*:
- в опциях, задаваемых с помощью командной строки;
- в настройках файла конфигурации конкретного пользователя
/.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-адресами.
*Примечание: ниже покажем на примерах, как использовать данные опции в файле 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 будет так же полезно для автоматизации работы, при написании скриптов выполняющих самостоятельно команды на удаленных серверах.
Источник