Как подключиться по ключу ssh

Как подключиться к серверу по SSH с помощью пароля или ключа

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

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

Проверка службы SSH на сервере

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

Например, у меня VDS на Timeweb. Чтобы попасть в консоль, я авторизуюсь по логину и паролю, выданному хостером, выбираю свой сервер в списке VDS и перехожу на вкладку «Консоль».

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Чтобы пользоваться консолью, нужно авторизоваться. Логин и пароль для доступа к серверу хостер присылает в письме. Сначала нужно ввести логин и нажать на клавишу Enter. Появится строка Password. В ней необходимо ввести пароль и снова нажать на клавишу Enter.

Важно: в целях безопасности при вводе пароля на экране не отображаются никакие символы, даже привычные звездочки.

После авторизации в консоли можно проверить, запущена ли служба SSH на сервере.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Если служба не активна, добавьте ее самостоятельно. Выполните команду sudo apt install openssh-server и подтвердите установку пакетов.

Кроме того, для подключения вам может понадобиться настройка брандмауэра. Чтобы межсетевой экран не блокировал входящие соединения, можно на время отключить его командой sudo ufw disable.

Использование пароля

Начнем с инструкции о том, как подключиться к удаленному серверу через SSH по логину и паролю. Это самый простой способ. Хостер предоставляет вам IP-адрес, логин и пароль. Этого достаточно для того, чтобы установить соединение с удаленным сервером.

Подключение на Windows

Моя основная система — Windows. Раньше для подключения к серверу через SSH я пользовался сторонней утилитой PuTTY, потому что в операционной системе не было встроенного компонента. В «десятке» он появился, так что теперь можно подключаться к SSH через командную строку (cmd).

Чтобы включить встроенный в систему OpenSSH:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Теперь разберемся, как подключиться к SSH через cmd. Запустите командную строку и выполните запрос вида ssh root@185.104.114.90.

После выполнения команды клиент SSH предложит добавить устройство в список известных. Введите в командной строке yes и нажмите на Enter. Затем укажите пароль для доступа к серверу. На этом подключение к серверу через SSH завершено — теперь все команды будут выполняться на удаленной машине, к которой вы подключились.

На версиях младше Windows 10 1809 нет встроенной поддержки протокола OpenSSH. В таком случае понадобится сторонняя утилита. Смотрим, как через PuTTY подключиться по SSH:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

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

Подключение на Linux и macOS

Теперь посмотрим, как подключиться по SSH через терминал на Linux. Для этого не требуется установка дополнительных компонентов, все работает «из коробки».

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

Если IP-адрес или порт указаны неверно, то на экране появится сообщение об ошибке — Connection Refused. Это может также говорить о том, что доступ запрещен брандмауэром на удаленном сервере (если вы его не отключили). Чтобы разрешить подключение через SSH:

Цифра 22 в синтаксисе — номер порта. Если вы используете другой порт, то укажите его явно.

Источник

Автоматическая SSH-авторизация по ключу

Допустим, Вам необходимо настроить беспарольный вход по SSH, SCP или SFTP на удаленный сервер remote.org.ua под пользователем user. Если имя Вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить.

Создание SSH-ключей

По умолчанию в корневой директории пользователя находится директория .ssh, если по какой то причине её нет, то создаём её командой:

1) Cоздаем открытый и закрытый ключ нашей локальной системы:

Подробнее о ключах можете посмотреть с помощью команды:

2) Если в системе есть программа ssh-copy-id, то настраиваем удаленную систему на то, чтобы она авторизовывала SSH по открытому ключу:

переходим к шагу 4

3) Если ssh-copy-id нет, то можно сделать это вручную.

Вот последовательность действий:

3.1) копируем открытый ключ на удаленную систему:

3.2) Авторизуемся на удаленном сервере:

3.3) Заносим открытый ключ нашей локальный системы в авторизованные ключи удаленной системы, устанавливаем правильные права и «убираем за собой мусор»:

4) Проверяем, что все работает, запускаем на локальном компьютере:

Пример автоматического подключения из Windows через Putty и PuTTYgen

Для начала скачаем с официального сайта обе утилиты отсюда.

еперь утилитой PuTTYgen сгенерируем публичный и приватный ключ. Открываем утилиту и нажимаем Generate:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

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

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Сейчас скопируем публичный ключ в файл .ssh/authorized_keys находящийся на Вашем аккаунте. Для этого открываем утилиту Putty:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Вводим логин пользователя (он совпадает с именем от личного кабинета):

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

После ввода пароля видим, что нас вежливо приветствует система:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Источник

Памятка пользователям ssh

Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

Управление ключами

Теория в нескольких словах: ssh может авторизоваться не по паролю, а по ключу. Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются (я утрирую) и если всё ок — пускают. Важно: авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом (та самая криптографическая магия).

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

Свой ключ можно сгенерировать с помощью команды ssh-keygen. Если не задать параметры, то он сохранит всё так, как надо.

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

Структура ключа

/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.

/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать. Если вы в письмо/чат скопипастите его вместо pub, то нужно генерировать новый ключ. (Я не шучу, примерно 10% людей, которых просишь дать ssh-ключ постят id_rsa, причём из этих десяти процентов мужского пола 100%).

Копирование ключа на сервер

/.ssh/authorized_keys и положить туда открытый ключ, то можно будет заходить без пароля. Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе ssh его не примет. В ключе последнее поле — user@machine. Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.

Если вы знаете пароль пользователя, то процесс можно упростить. Команда ssh-copy-id user@server позволяет скопировать ключ не редактируя файлы вручную.

Замечание: Старые руководства по ssh упоминают про authorized_keys2. Причина: была первая версия ssh, потом стала вторая (текущая), для неё сделали свой набор конфигов, всех это очень утомило, и вторая версия уже давным давно переключилась на версии без всяких «2». То есть всегда authorized_keys и не думать о разных версиях.

Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе: ssh-copy-id ‘-p 443 user@server’ (внимание на кавычки).

Ключ сервера

/.ssh/known_hosts. Узнать, где какой ключ нельзя (ибо несекьюрно).

Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа. Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов). Сценарий «злобной man in the middle атаки» маловероятен, чаще просто ошибка с IP, хотя если «всё хорошо», а ключ поменялся — это повод поднять уровень паранойи на пару уровней (а если у вас авторизация по ключу, а сервер вдруг запросил пароль — то паранойю можно включать на 100% и пароль не вводить).

Ключ сервера хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub. Их можно:
а) скопировать со старого сервера на новый.
б) сгенерировать с помощью ssh-keygen. Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.

Заметим, если вы сервера клонируете (например, в виртуалках), то ssh-ключи сервера нужно обязательно перегенерировать.

Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.

Копирование файлов

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

scp path/myfile user@8.8.8.8:/full/path/to/new/location/

Обратно тоже можно:
scp user@8.8.8.8:/full/path/to/file /path/to/put/here

Fish warning: Не смотря на то, что mc умеет делать соединение по ssh, копировать большие файлы будет очень мучительно, т.к. fish (модуль mc для работы с ssh как с виртуальной fs) работает очень медленно. 100-200кб — предел, дальше начинается испытание терпения. (Я вспомнил свою очень раннюю молодость, когда не зная про scp, я копировал

5Гб через fish в mc, заняло это чуть больше 12 часов на FastEthernet).

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

sshfs

Теория: модуль fuse позволяет «экспортировать» запросы к файловой системе из ядра обратно в userspace к соответствующей программе. Это позволяет легко реализовывать «псевдофайловые системы». Например, мы можем предоставить доступ к удалённой файловой системе через ssh так, что все локальные приложения (за малым исключением) не будут ничего подозревать.

Собственно, исключение: O_DIRECT не поддерживается, увы (это проблема не sshfs, это проблема fuse вообще).

Использование: установить пакет sshfs (сам притащит за собой fuse).

Собственно, пример моего скрипта, который монтирует desunote.ru (размещающийся у меня на домашнем комьютере — с него в этой статье показываются картинки) на мой ноут:

Делаем файл +x, вызываем, идём в любое приложение, говорим сохранить и видим:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Если вы много работаете с данными от рута, то можно (нужно) сделать idmap:

-o idmap=user. Работает она следующим образом: если мы коннектимся как пользователь pupkin@server, а локально работаем как пользователь vasiliy, то мы говорим «считать, что файлы pupkin, это файлы vasiliy». ну или «root», если мы коннектимся как root.

В моём случае idmap не нужен, так как имена пользователей (локальное и удалённое) совпадают.

Заметим, комфортно работать получается только если у нас есть ssh-ключик (см. начало статьи), если нет — авторизация по паролю выбешивает на 2-3 подключение.

Удалённое исполнение кода

ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:

ssh user@server ls /etc/

Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка.

Это нас приводит следующей фиче:

Проброс stdin/out

Допустим, мы хотим сделать запрос к программе удалённо, а потом её вывод поместить в локальный файл

ssh user@8.8.8.8 command >my_file

Допустим, мы хотим локальный вывод положить удалённо

mycommand |scp — user@8.8.8.8:/path/remote_file

Усложним пример — мы можем прокидывать файлы с сервера на сервер: Делаем цепочку, чтобы положить stdin на 10.1.1.2, который нам не доступен снаружи:

mycommand | ssh user@8.8.8.8 «scp — user@10.1.1.2:/path/to/file»

Есть и вот такой головоломный приём использования pipe’а (любезно подсказали в комментариях в жж):

Tar запаковывает файлы по маске локально, пишет их в stdout, откуда их читает ssh, передаёт в stdin на удалённом сервере, где их cd игнорирует (не читает stdin), а tar — читает и распаковывает. Так сказать, scp для бедных.

Алиасы

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

Можно прописать общесистемные alias’ы на IP (/etc/hosts), но это кривоватый выход (и пользователя и опции всё равно печатать). Есть путь короче.

/.ssh/config позволяет задать параметры подключения, в том числе специальные для серверов, что самое важное, для каждого сервера своё. Вот пример конфига:

Все доступные для использования опции можно увидеть в man ssh_config (не путать с sshd_config).

Опции по умолчанию

По подсказке UUSER: вы можете указать настройки соединения по умолчанию с помощью конструкции Host *, т.е., например:

То же самое можно сделать и в /etc/ssh/ssh_config (не путать с /etc/ssh/sshd_config), но это требует прав рута и распространяется на всех пользователей.

Проброс X-сервера

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

и чудо, окошко логина в windows на нашем рабочем столе. Заметим, тщательно зашифрованное и неотличимое от обычного ssh-трафика.
Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Socks-proxy

Когда я оказываюсь в очередной гостинице (кафе, конференции), то местный wifi чаще всего оказывается ужасным — закрытые порты, неизвестно какой уровень безопасности. Да и доверия к чужим точкам доступа не особо много (это не паранойя, я вполне наблюдал как уводят пароли и куки с помощью банального ноутбука, раздающего 3G всем желающим с названием близлежащей кафешки (и пишущего интересное в процессе)).

Особые проблемы доставляют закрытые порты. То джаббер прикроют, то IMAP, то ещё что-нибудь.

Обычный VPN (pptp, l2tp, openvpn) в таких ситуациях не работает — его просто не пропускают. Экспериментально известно, что 443ий порт чаще всего оставляют, причём в режиме CONNECT, то есть пропускают «как есть» (обычный http могут ещё прозрачно на сквид завернуть).

Решением служит socks-proxy режим работы ssh. Его принцип: ssh-клиент подключается к серверу и слушает локально. Получив запрос, он отправляет его (через открытое соединение) на сервер, сервер устанавливает соединение согласно запросу и все данные передаёт обратно ssh-клиенту. А тот отвечает обратившемуся. Для работы нужно сказать приложениям «использовать socks-proxy». И указать IP-адрес прокси. В случае с ssh это чаще всего localhost (так вы не отдадите свой канал чужим людям).

Подключение в режиме sock-proxy выглядит так:

Вот так выглядит мой конфиг:

/etc/ssh/sshd_config:
(фрагмент)
Port 22
Port 443

/.ssh/config с ноутбука, который описывает vpn

(обратите внимание на «ленивую» форму записи localhost — 127.1, это вполне себе законный метод написать 127.0.0.1)

Проброс портов

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

Для понимания ситуации все примеры ниже будут ссылаться на вот эту схему:

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Комментарии: Две серые сети. Первая сеть напоминает типичную офисную сеть (NAT), вторая — «гейтвей», то есть сервер с белым интерфейсом и серым, смотрящим в свою собственную приватную сеть. В дальнейших рассуждениях мы полагаем, что «наш» ноутбук — А, а «сервер» — Б.

Задача: у нас локально запущено приложение, нам нужно дать возможность другому пользователю (за пределами нашей сети) посмотреть на него.

Решение: проброс локального порта (127.0.0.1:80) на публично доступный адрес. Допустим, наш «публично доступный» Б занял 80ый порт чем-то полезным, так что пробрасывать мы будем на нестандартный порт (8080).

Итоговая конфигурация: запросы на 8.8.8.8:8080 будут попадать на localhost ноутбука А.

Опция -R позволяет перенаправлять с удалённого (Remote) сервера порт на свой (локальный).
Важно: если мы хотим использовать адрес 8.8.8.8, то нам нужно разрешить GatewayPorts в настройках сервера Б.
Задача. На сервере «Б» слушает некий демон (допустим, sql-сервер). Наше приложение не совместимо с сервером (другая битность, ОС, злой админ, запрещающий и накладывающий лимиты и т.д.). Мы хотим локально получить доступ к удалённому localhost’у.

Итоговая конфигурация: запросы на localhost:3333 на ‘A’ должны обслуживаться демоном на localhost:3128 ‘Б’.

Опция -L позволяет локальные обращения (Local) направлять на удалённый сервер.

Задача: На сервере «Б» на сером интерфейсе слушает некий сервис и мы хотим дать возможность коллеге (192.168.0.3) посмотреть на это приложение.

Итоговая конфигурация: запросы на наш серый IP-адрес (192.168.0.2) попадают на серый интерфейс сервера Б.

Вложенные туннели

Разумеется, туннели можно перенаправлять.

Усложним задачу: теперь нам хочется показать коллеге приложение, запущенное на localhost на сервере с адресом 10.1.1.2 (на 80ом порту).

Что происходит? Мы говорим ssh перенаправлять локальные запросы с нашего адреса на localhost сервера Б и сразу после подключения запустить ssh (то есть клиента ssh) на сервере Б с опцией слушать на localhost и передавать запросы на сервер 10.1.1.2 (куда клиент и должен подключиться). Порт 9999 выбран произвольно, главное, чтобы совпадал в первом вызове и во втором.

Реверс-сокс-прокси

Туннелирование

Если к этому моменту попа отдела безопасности не сияет лысиной, а ssh всё ещё не внесён в список врагов безопасности номер один, вот вам окончательный убийца всего и вся: туннелирование IP или даже ethernet. В самых радикальных случаях это позволяет туннелировать dhcp, заниматься удалённым arp-спуфингом, делать wake up on lan и прочие безобразия второго уровня.

(сам я увы, таким не пользовался).

Легко понять, что в таких условиях невозможно никаким DPI (deep packet inspection) отловить подобные туннели — либо ssh разрешён (читай — делай что хочешь), либо ssh запрещён (и можно смело из такой компании идиотов увольняться не ощущая ни малейшего сожаления).

Проброс авторизации

Если вы думаете, что на этом всё, то…… впрочем, в отличие от автора, у которого «снизу» ещё не написано, читатель заранее видит, что там снизу много букв и интриги не получается.

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

Для начала о простом пробросе авторизации.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Допустим, мы хотим подключиться к серверу 10.1.1.2, который готов принять наш ключ. Но копировать его на 8.8.8.8 мы не хотим, ибо там проходной двор и половина людей имеет sudo и может шариться по чужим каталогам. Компромиссным вариантом было бы иметь «другой» ssh-ключ, который бы авторизовывал user@8.8.8.8 на 10.1.1.2, но если мы не хотим пускать кого попало с 8.8.8.8 на 10.1.1.2, то это не вариант (тем паче, что ключ могут не только поюзать, но и скопировать себе «на чёрный день»).

Вызов выглядит так:

Удалённый ssh-клиент (на 8.8.8.8) может доказать 10.1.1.2, что мы это мы только если мы к этому серверу подключены и дали ssh-клиенту доступ к своему агенту авторизации (но не ключу!).

В большинстве случаев это прокатывает.

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

Есть ещё более могучий метод — он превращает ssh в простой pipe (в смысле, «трубу») через которую насквозь мы осуществляем работу с удалённым сервером.

Главным достоинством этого метода является полная независимость от доверенности промежуточного сервера. Он может использовать поддельный ssh-сервер, логгировать все байты и все действия, перехватывать любые данные и подделывать их как хочет — взаимодействие идёт между «итоговым» сервером и клиентом. Если данные оконечного сервера подделаны, то подпись не сойдётся. Если данные не подделаны, то сессия устанавливается в защищённом режиме, так что перехватывать нечего.

Эту клёвую настройку я не знал, и раскопал её redrampage.

Выглядит это так (циферки для картинки выше):

Повторю важную мысль: сервер 8.8.8.8 не может перехватить или подделать трафик, воспользоваться агентом авторизации пользователя или иным образом изменить трафик. Запретить — да, может. Но если разрешил — пропустит через себя без расшифровки или модификации. Для работы конфигурации нужно иметь свой открытый ключ в authorized_keys как для user@8.8.8.8, так и в user2@10.1.1.2

Разумеется, подключение можно оснащать всеми прочими фенечками — прокидыванием портов, копированием файлов, сокс-прокси, L2-туннелями, туннелированием X-сервера и т.д.

Источник

igorsmolin

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Изучаем и настраиваем SSH аутентификацию по открытому ключу

Коллеги, приветствую. Сегодня мы познакомимся с методом аутентификации по открытым ключам в SSH. Познакомимся с основными принципами и ключевыми понятиями. Разберем несколько способов формирования ключевой пары, а также произведем конфигурацию и подключение к SSH серверу на системах Windows и Linux. Если Вы в своей деятельности часто используете SSH и хотели бы увеличить безопасность подключений, то давайте вместе разбираться как можно применять аутентификацию по ключу на проектах.

Что это такое и зачем это нужно?

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

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

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

Симметричное и асимметричное шифрование

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

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

Ключевая пара

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

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

Применение на практике

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

Также нам будет необходимо установить и сконфигурировать SSH сервер. В качестве примера мы возьмем популярный проект — OpenSSH Server, который доступен для установки на различных операционных системах в т.ч — Windows и Linux.

Настройка доступа по ключам

Разворачиваем виртуальную машину

Для целей тестирования предлагаю создать небольшой тестовый стенд из одной виртуальной машины. Для автоматизации этого процесса можно скачать или склонировать репозиторий на GitHub и выполнить предварительные шаги по установке.

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

Когда предварительные действия будут выполнены, перейдите в папку сценария Localhost_1.2 для развертывания CentOS, либо в папку Localhost_1.3 для развертывания Ubuntu, либо в папку Localhost_1.0 для развертывания Windows Server и выполните команду:

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

Спустя время, виртуальная машина будет готова и мы сможем подключиться к ней либо через менеджер виртуальных машин VirtualBox, либо при помощи ssh подключения по адресу 127.0.0.1:2222.

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

В случае, если была выбрана виртуальная машина на Windows, мы можем подключиться к ней при помощи RDP по адресу 127.0.0.1:33389.

В качестве учетной записи для подключения указываем — Administrator. Пароль — vagrant.

Конфигурация сервера. Установка OpenSSH на Linux

Для установки OpenSSH сервера на CentOS выполним следующую команду:

Итогом должна быть установка, обновление или сообщение об актуальности версии OpenSSH. В моем случае установлена актуальная версия инструмента.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Для установки OpenSSH сервера на Ubuntu выполним следующие команды:

Результатом также будут установка, обновление или сообщение об актуальности версии OpenSSH.

Запустим службу sshd выполнив команду:

Конфигурация сервера. Установка OpenSSH на Windows

Компонент OpenSSH Server доступен в Windows из коробки начиная с версии Windows 10 1809 и Windows Server 2019. Для быстрой установки откроем Powershell от имени администратора и введем команду:

Будет запущен процесс установки компонента OpenSSH Server.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

В дополнение к вышеуказанной команде выполним еще пару команд. Запустим службу sshd и выберем тип запуска — Автоматический.

Создадим разрешающее правило в Firewall Windows.

Конфигурация клиента. Формирование ключевой пары на Windows (PuTTYgen)

Сначала попробуем сгенерировать ключевую пару при помощи PuTTY. Для этого нам достаточно скачать инструменты PuTTY и PuTTYgen с официального сайта — https://www.putty.org/.

Инструмент PuTTY нам понадобится для ssh подключения чуть позже, а с помощью PuTTYgen мы сможем сформировать ключевую пару прямо сейчас.

Запустим PuTTYgen и выберем Generate. Все остальные настройки можно оставить по умолчанию.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Далее водим по рабочему столу указателем мыши для формирования ключевой пары. В итоге перед нами появится такое окно.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Поздравляю, мы успешно сгенерировали ключевую пару при помощи PuTTYgen. Сохраним закрытую часть ключа в виде файла при помощи кнопки Save private key в надежное место. PuTTYgen спросит нас о том хотим ли мы пропустить создание ключевой фразы для закрытой части. В нашем случае мы соглашаемся и отвечаем — Да.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Не закрывая окно PuTTYgen переходим в раздел Public key for pasting into OpenSSH authorized_keys file и копируем из него все содержимое. Эта информация нам понадобится на этапе добавления открытого ключа на SSH сервер.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Конфигурация клиента. Формирование ключевой пары на Linux (ssh-keygen)

Теперь попробуем сгенерировать ключевую пару из под Linux при помощи инструмента ssh-keygen. Для теста воспользуемся Ubuntu.

Выполним команду ssh-keygen. Мастер сообщит нам о начале процедуры генерации ключевой пары. Инструмент также спросит о том, где разместить ключ и будем ли мы использовать ключевую фразу. Оставим все значения по умолчанию и продолжим.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

/.ssh должны появиться две части ключа. id_rsa — закрытая часть, id_rsa.pub — открытая часть.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

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

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

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Конфигурация сервера. Разрешение аутентификации по ключу и добавление ключей на Linux.

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

После успешного логина добавим скопированную нами открытую часть ключа из предыдущего этапа в файл

Вставляем открытую часть ключа и сохраняем файл.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Фактически, мы только что связали с пользователем открытую часть ключа. У пользователя может быть несколько ключей для аутентификации. Все они должны быть перечислены в этом файле.

Теперь включим возможность аутентификации по ключу и отключим возможность подключения по паролю. Для этого выполним команду:

Или откроем конфигурационный файл /etc/ssh/sshd_config любым удобным редактором.

Находим строку PasswordAuthentication и устанавливаем значение no. Также находим строку PubkeyAuthentication и устанавливаем значение yes.

Для применения конфигурации перезапустим службу OpenSSH сервера выполнив команду:

Конфигурация сервера. Разрешение аутентификации по ключу и добавление ключей на Windows.

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

Для этого запустим PowerShell от имени администратора и выполним команду:

Подключение к серверу SSH по открытой части ключа на Windows.

Запустим PuTTY и введем адрес подключения к SSH серверу.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

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

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

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

Результат ssh аутентификации по ключу на сервере CentOS или Ubuntu.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Результат ssh аутентификации по ключу на сервере Windows.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Подключение к серверу SSH по открытой части ключа на Linux.

Выполним подключение к серверу SSH. Для этого запустим на исполнение команду:

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

Результат ssh аутентификации по ключу на сервере CentOS или Ubuntu.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Результат ssh аутентификации по ключу на сервере Windows.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Конвертация ключей

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

Представьте простую и вполне реальную ситуацию. Вы сгенерировали ключевую пару и хотели бы распространить ее на других своих устройствах. Проблемой может стать желание перенести ключевую пару на Linux, которая была сгенерирована при помощи PuTTYgen под Windows.

К сожалению, если скопировать такой ключ и попытаться произвести вход на SSH сервер, мы скорее всего получим ошибку: Load key «/root/.ssh/id_rsa»: invalid format, либо подобные.

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

Самый просто способ — запустить PuTTYgen, загрузить сохраненную закрытую часть ключа при помощи кнопки Load.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Перейти в раздел Conversions и выбрать меню Export OpenSSH key.

Как подключиться по ключу ssh. Смотреть фото Как подключиться по ключу ssh. Смотреть картинку Как подключиться по ключу ssh. Картинка про Как подключиться по ключу ssh. Фото Как подключиться по ключу ssh

Инструмент позволит нам сохранить закрытую часть в формате (PEM), который генерирует ssh-keygen.

Точно таким же методом мы можем производить обратное преобразование из PEM в формат PuTTY. Таким образом, нет необходимости создавать разные сущности ключей, мы сможем использовать одну.

Итоги

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *