Authorization ssh-key on the operating system Linux RedOS 8.0 -------------------------------------------------------------------------------------------------------------------------------------------------------------- Все описанные ниже действия выполнялись под пользователем root -------------------------------------------------------------------------------------------------------------------------------------------------------------- Всем привет! Для реализации данного проекта мне потребовалось: 1) Рабочая станция на ОС RedOS; 2) Сгенерированные ssh-ключи со схемой подписи ED25519; 3) Создать каталог, переместить созданные ключи и выдать нужные права доступа к каталогу и ключам; 4) Настроить клиентскую ВМ на Linux; 5) Настроить клиентскую ВМ на Windows. -------------------------------------------------------------------------------------------------------------------------------------------------------------- Предисловие: ------------ Nano — это консольный текстовый редактор для UNIX и Unix-подобных операционных систем, основанный на библиотеке curses и распространяемый под лицензией GNU GPL. ------------ SSH — это сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений. ------------ SSH-ключи — это пара криптографических ключей, которые обеспечивают безопасную связь между двумя устройствами. ------------ ED25519 — Это схема подписи на эллиптической кривой, которая обеспечивает лучшую безопасность, чем ECDSA и DSA, и хорошую производительность. ------------ OpenSSH — это свободная реализация сетевого протокола, позволяющего создавать защищенные соединения, удаленно управлять операционной системой и туннелировать TCP-соединения. ------------ Chocolatey — это менеджер пакетов с интерфейсом командной строки и установщик программного обеспечения для Windows на машинном уровне. ------------ .NET Framework — это среда разработки программного обеспечения для создания и запуска приложений в Windows. ------------ chmod — это команда для изменения прав доступа к файлам и каталогам, используемая в Unix-подобных операционных системах. ------------ 10.10.10.10 — IP-адрес ВМ с ОС Linux Fedora 39. ------------ 10.10.10.11 — IP-адрес ВМ с ОС Windows Server 2016 Standard GUI. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1) Подключения по ssh-ключам работает на любых рабочих станциях с ОС Linux. В моём случае была использована рабочая станция с ОС Linux RedOS 8.0 Standard Edition. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 2) Генерация ssh-ключей со схемой подписи ED25519. ------------ ssh-keygen -t ed25519 |#|#| Команда для генерации пары ssh-ключей со схемой подписи ED25519 ------------ После выполнения команды у вас появятся диалоговые сообщения в консоли: Generating public/private ed25519 key pair. |#|#| Генерация пары открытого/частного ключей ed25519. Enter file in which to save the key (/root/.ssh/id_ed25519): |#|#| В данной строке можете изменить путь сохранения пары ключей вместе с их наименованием. Enter passphrase (empty for no passphrase): |#|#| По своему желанию можете добавить ключам парольную фразу, либо просто нажать Enter. Enter same passphrase again: |#|#| Повторите парольную фразу если она была введена выше. Your identification has been saved in /root/.ssh/id_ed25519 |#|#| Приватный ключ был сохранен в /root/.ssh/id_ed25519 Your public key has been saved in /root/.ssh/id_ed25519.pub |#|#| Публичный ключ был сохранен в /root/.ssh/id_ed25519.pub The key fingerprint is: |#|#| Ниже будет отрисован отпечаток ключа. SHA256:lJb+XRNpJdkwC1aAdTwNJI2eUDlDp/0Q+VUJRHQAQwU root@probook The key's randomart image is: +--[ED25519 256]--+ | .E//&O=| | oo.*BBO+| | = o.+Bo.| | + o. +.| | S o .| | . . . . | | . . | | | | | +----[SHA256]-----+ ------------ Для удобства также можете поменять стоковые наименования ssh-ключей. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 3) Создание каталога, перемещение созданных ключей и выдача нужных прав доступа к каталогу и ключам. ------------ Если вам нужно хранить ключи не в домашнем каталоге пользователя, то создайте каталог ".ssh" в нужном для вас месте: mkdir /home/user/.ssh |#|#| Команда для создания каталога ".ssh" в домашней директории пользователя "user" ------------ Далее вам нужно скопировать/переместить сгенерированную пару, либо только приватный ключ в созданный ранее каталог ".ssh": cp /root/.ssh/id_ed25519 /home/user/.ssh/ |#|#| Команда для копирования приватного ssh-ключа из root-каталога в user-каталог ------------ cp /root/.ssh/id_ed25519.pub /home/user/.ssh/ |#|#| Команда для копирования публичного ssh-ключа из root-каталога в user-каталог ------------ После копирования ключей из root-каталога в user-каталог, настоятельно рекомендую от них избавиться в "/root/.ssh/". ------------ После того как ssh-ключи оказались в нужном для вас месте, перейдём к выдаче нужных прав доступа каталогу ".ssh" и приватному ключу(данные манипуляции выполнять ИМЕННО НА РАБОЧЕЙ СТАНЦИИ НЕ ОБЯЗАТЕЛЬНО): chmod 700 /home/user/.ssh/ |#|#| Команда для выдачи каталогу ".ssh" прав drwx------ |\ |\ chown root:root /home/user/.ssh/ |#|#| Команда для смены группы и владельца у каталога ".ssh" | Данные манипуляции были выполнены для того, чтобы |——— доступ к каталогу ".ssh" и ssh-ключам, которые chmod 600 /home/user/.ssh/id_ed25519 |#|#| Команда для выдачи приватному ключу "id_ed25519" прав -rw------- | в нём находятся, имел только пользователь "root". |/ chmod 600 /home/user/.ssh/id_ed25519.pub |#|#| Команда для выдачи приватному ключу "id_ed25519.pub" прав -rw------- |/ -------------------------------------------------------------------------------------------------------------------------------------------------------------- 4) Настройка клиентской ВМ на Linux. ------------ В моём случае есть ВМ с ОС Linux Fedora 39. На ней я хочу настроить авторизацию только по ssh-ключу. Приступим! ------------ Для начала нужно перейти в каталог ".ssh" и создать там файл "authorized_keys". Я хочу, чтобы чтобы после подключения к данной ВМ, я сразу же логинился под пользователем "root". Поэтому прописал свой публичный ssh-ключ в файле "authorized_keys", в каталоге "/root/.ssh/". cd /root/.ssh/ |#|#| Команда для перехода в каталог ".ssh" ------------ nano /root/.ssh/authorized_keys |#|#| Команда для создания и открытия файла "authorized_keys" в текстовом редакторе Nano ------------ Далее копируем текстовую информацию из файла "id_ed25519.pub" в открытый раннее файл "authorized_keys", после сохраняем и закрываем. ------------ chmod 700 /root/.ssh/ |#|#| Команда для выдачи каталогу ".ssh" прав drwx------ ------------ chmod 600 /root/.ssh/authorized_keys |#|#| Команда для выдачи файлу "authorized_keys" прав -rw------- ------------ После выполненых манипуляций пробуем подключиться со своей рабочей станции из ОС RedOS 8.0 к ВМ с ОС Linux Fedora 39: ssh -i /home/user/.ssh/id_ed25519 root@10.10.10.10 |#|#| Команда для подключения к ВМ с ОС Linux Fedora 39 из рабочей станции с ОС RedOS 8.0, с помощью приватного ssh-ключа "id_ed25519". Если все прошло успешно, то вы должны были залогиниться на ВМ под пользователем "root". ------------ Чтобы отключить подключение по ssh с помощью пароля, выполните следующие манипуляции: nano /etc/ssh/sshd_config |#|#| Команда для открытия конфигурационного файла "sshd_config" в текстовом редакторе Nano Далее находим строку "#PasswordAuthentication yes" и приводим её к следующему виду: PasswordAuthentication no ------------ После внесения изменений сохраняем и закрываем конфигурационный файл. Чтобы изменения вступили в силу, нужно выполнить перезапуск службы "sshd": systemctl restart sshd |#|#| Команда для перезапуска службы sshd ------------ После чего можно попробовать подключиться к ВМ без ssh-ключа, но этого сделать не получится. В итоге вы получите отказ в доступе: ssh root@10.10.10.10 root@10.10.10.10: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). -------------------------------------------------------------------------------------------------------------------------------------------------------------- 5) Настройка клиентской ВМ на Windows Server 2016 Standard GUI. ------------ В моём случае есть ВМ с ОС Windows Server 2016 Standard GUI. На ней я хочу настроить авторизацию только по ssh-ключу. Приступим! ------------ Изначально убедитесь в том, что на ВМ установлено ПО .NET Framework 4.8. Если его нет, то скачайте и установите его с официального сайта: https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe ------------ После чего можно приступать к установке ПО Chocolatey: Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) |#|#| Команда для установки ПО Chocolatey ------------ После успешной установки ПО Chocolatey, приступаем к установке ПО OpenSSH: choco install openssh -y -f |#|#| Команда для установки ПО OpenSSH ------------ Restart-Computer -Force |#|#| Команда для перезагрузки ОС WIndows Server 2016 Standard GUI ------------ ssh -Vssh -V |#|#| Команда для просмотра установленной версии ПО OpenSSH ------------ cd "C:\Program Files\OpenSSH-Win64" |#|#| Команда для перехода в каталог "C:\Program Files\OpenSSH-Win64" ------------ Running Installation & Setup-Script |#|#| Команда для запуска сценария установки и настройки служб sshd и ssh-agent ------------ New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 |#|#| Команда для создания необходимого правила в Firewall ------------ net start sshd |#|#| Команда для запуска службы OpenSSH ------------ Set-Service sshd -StartupType Automatic |#|#| Команда для автоматического запуска службы OpenSSH при запуске ОС ------------ get-service | findstr ssh |#|#| Команда для проверки стасута служб "sshd-agent" и "sshd" ------------ После выполненых манипуляций можно проверять подключение к ВМ на Windows Server 2016 Standard GUI из рабочей станции с ОС RedOS 8.0. Если все действия выше были выполнены успешно, то вы получите готовое рабочее решение. ------------ $acl = Get-Acl C:\ProgramData\ssh\administrators_authorized_keys |#|#|\ $acl.SetAccessRuleProtection($true, $false) |#|#|\ $administratorsRule = New-Object system.security.accesscontrol.filesystemaccessrule("Administrators","FullControl","Allow") |#|#| Данными командами настраиваются определенные $systemRule = New-Object system.security.accesscontrol.filesystemaccessrule("SYSTEM","FullControl","Allow") |#|#|——— разрешения для конфигурационного файла $acl.SetAccessRule($administratorsRule) |#|#| "administrators_authorized_keys". $acl.SetAccessRule($systemRule) |#|#|/ $acl | Set-Acl |#|#|/ ------------ New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force |#|#| Команда для внесения некоторых изменений в оболочке PowerShell ------------ Далее открываем конфигурационный файл "sshd_config", который расположен в каталоге "C:\ProgramData\ssh\" и приводим нужные нам строчки к определенному виду: #PubkeyAuthentication yes > PubkeyAuthentication yes #StrictModes yes > StrictModes no ------------ Restart-Service sshd |#|#| Команда для перезапуска службы sshd ------------ cd C:\Users\Администратор\ |#|#| Команда для перехода в каталог "C:\Users\Администратор\" либо(В моём случае сработал второй вариант, но я так особо и не понял, как создался второй пользователь "Администратор.WIN-K0OJQLRMLUV".) cd C:\Users\Администратор.WIN-K0OJQLRMLUV\ |#|#| Команда для перехода в каталог "C:\Users\Администратор.WIN-K0OJQLRMLUV\"(WIN-K0OJQLRMLUV - это имя ВМ) ------------ mkdir .ssh |#|#| Команда для создания каталога ".ssh" ------------ cd .ssh |#|#| Команда для перехода в каталог ".ssh" ------------ New-Item -Path 'authorized_keys' -ItemType File |#|#| Команда для создания пустого файла с наименованием "authorized_keys" ------------ Далее открываем созданный ранее файл "authorized_keys" в любом текстовом редакторе и прописываем в файле публичный ключ, после чего сохраняем и закрываем файл. ------------ cd C:\ProgramData\ssh\ |#|#| Команда для перехода в каталог "C:\ProgramData\ssh\" ------------ New-Item -Path 'administrators_authorized_keys' -ItemType File |#|#| Команда для создания пустого файла с наименованием "administrators_authorized_keys" ------------ Далее открываем созданный ранее файл "administrators_authorized_keys" в любом текстовом редакторе и прописываем публичный ключ, после чего сохраняем и закрываем. ------------ Restart-Service sshd |#|#| Команда для перезапуска службы sshd ------------ После проделанных выше манипуляций можете пробовать подключаться к ВМ с ОС Windows Server 2016 Standard GUI из рабочей станции с ОС RedOS 8.0 через службу ssh, используя ssh-ключ. Если подключение прошло успешно, то все настроено правильно! -------------------------------------------------------------------------------------------------------------------------------------------------------------- На этом инструкция закончена! Всем спасибо за внимание!