Ssh ключ что это: Для чего нужен SSH-ключ и как его создать под Windows — Практика веб-разработки

Содержание

Для чего нужен ssh ключ

ssh ключи используются для облегчённой авторизации на различных сервисах, мы в своём проекте тоже можем использовать для централизованной авторизации
ssh ключ состоит из двух частей
id_rsa — закрытая часть, которая должна быть доступна только вам, ни кому и ни когда нельзя давать к ней доступ, этот файл можно переносить с компа на ком. так чтобы был у вас был только 1 ключ, но тут свои риски, например у вас в одном месте кто-то получил доступ к $HOME, следовательно все ваши акаунты потенциально взломали
id_rsa.pub — открытая часть, бесполезна без закрытой, её можно показывать всем, можно даже повесить на своём сайте, чтобы желающие дать вам доступ на свой сервер могли быстро добавить ваш открытый ключ в файл

~/.ssh/authorized_keys
бывает так, что вам дают только ftp доступ, но очень часто бывает так, что пользователь ftp это обычный пользователь в Linux, а значит возможно подключиться по ssh на этот сервер, для этого нужно по ftp создать файл ~/.ssh/authorized_keys и положить туда свой открытый ключь, часто помогает

ну а мы сейчас будем использовать ssh ключ, для авторизации на github, по сути, там огромный сервер, с кучей пользователей, у каждого своя домашняя папка в которой лежата каталоги проектов
и беря у вас ваши открытые ключи, я их добавляю в ~/.ssh/authorized_keys чтобы у вас была возможность вносить изменения в директории проекта pf-auth
как видите, github сделал для этого удобный и наглядный вебинтерфейс, дёшево и сердито

сгенерировать ssh ключ можно вот так
ssh-keygen
программа задаст несколько вопросов и спросит мастер пароль
этот мастер пароль используется демоном ключей, и защищает ваш ключ, если кто-то у вас скопировал файл id_rsa
если пароль не задан, то он тупо просто поимеет все ваши сервера

в общем стоит посмотреть на директорию ~/.ssh/ там несколько интересных и важных файлов

вот интерфейс добавления открытых ключей на гитхабе

в ubuntu есть утилита, для управления ключам

ну и собственно, как видите, это всё как то просто и примитивно, какой то файл, и тд., нужно копировать и посылать куда то

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

например вот так, в убунту добавляется ключ,размещённый на внешнем сервере

sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-keys 9D1A0061

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

SSH-аутентификация по ключам | Вопросы-ответы на Wiki

Важные моменты:

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

  1. Откройте консоль:

  2. Перейдите в каталог .ssh, выполнив команду:

  3. Сгенерируйте пару ключей, выполнив команду:
    ssh-keygen -t rsa -b 2048

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

    id_rsa (если вы укажете своё имя файла, используйте его во всех последующих командах вместо id_rsa). Запомните вывод строки «The key fingerprint is:».
    С параметрами по умолчанию ключи сохранятся в подкаталоге .ssh домашнего каталога пользователя. Это будут два файла:

  4. Выведите содержимое публичного ключа, выполнив команду:

  5. Скопируйте выведенное содержимое ключа и добавьте его на сервере.
  1. Скачайте и установите PuTTY.
  2. Сгенерируйте секретный ключ в формате PuTTY с помощью утилиты PuTTYgen:

    1. Запустите puttygen.exe.

    2. Напротив «

      Generate a public/private key pair» нажмите «Generate».

    3. Сохраните сгенерированный приватный ключ, нажав «Save private key».

    4. Скопируйте содержимое публичного ключа из поля «Public key for pasting into OpenSSH authorized_keys file» и добавьте его на сервере.
  3. Запустите PuTTY.

  4. Откройте раздел настроек «Connection → SSH → Auth».

  5. Рядом с полем «Private key for Authentification» нажмите «Browse» и выберите файл сгенерированного приватного ключа.

  6. Сохраните настройки и подключитесь к серверу.

  1. Укажите данные нового ключа и нажмите «Добавить ключ»:
  2. После добавления ключа информация о нём отобразите ниже. Сравните отпечаток, который выводился при генерации (отображался в строке напротив «The key fingerprint is:»), с отпечатком в строке «Отпечаток»:
  3. Если отпечатки совпадают, то при подключении по SSH пароль больше запрашиваться не будет.

Памятка пользователям ssh / Хабр

abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

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

Оглавление:

  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)

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

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

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

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

Сменить пароль на ключ можно с помощью команды ssh-keygen -p.

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

(если на вопрос про расположение ответили по-умолчанию).


~/.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 вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл

~/.ssh/known_hosts

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

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

Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.

Ключ сервера хранится в /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 [email protected]:/full/path/to/new/location/

Обратно тоже можно:
scp [email protected]:/full/path/to/file /path/to/put/here

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

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

Так тоже можно:

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

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

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

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

#!/bin/bash
sshfs desunote.ru:/var/www/desunote.ru/ /media/desunote.ru -o reconnect

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

Параметры sshfs, которые могут оказаться важными: -o reconnect (говорит пытаться пересоединиться вместо ошибок).

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

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

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

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

Отключить обратно можно командой fusermount -u /path, однако, если соединение залипло (например, нет сети), то можно/нужно делать это из-под рута: sudo umount -f /path.



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

ssh user@server ls /etc/

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

Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:
ssh user@server -t remove_command

Кстати, мы можем сделать что-то такого вида:
ssh user@server cat /some/file|awk '{print $2}' |local_app

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

Проброс stdin/out

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

ssh [email protected] command >my_file

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

mycommand |scp — [email protected]:/path/remote_file

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

mycommand | ssh [email protected] «scp — [email protected]:/path/to/file»

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

tar -c * | ssh user@server "cd && tar -x"

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

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

В более-менее крупной компании часто оказывается, что имена серверов выглядят так: spb-MX-i3.extrt.int.company.net. И пользователь там не равен локальному. То есть логиниться надо так: ssh [email protected]. Каждый раз печатать — туннельных синдромов не напасёшься. В малых компаниях проблема обратная — никто не думает о DNS, и обращение на сервер выглядит так: ssh [email protected]. Короче, но всё равно напрягает. Ещё большая драма, если у нас есть нестандартный порт, и, например, первая версия ssh (привет цискам). Тогда всё выглядит так: ssh -1 -p 334 [email protected]. Удавиться. Про драму с scp даже рассказывать не хочется.

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

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

Host ric
        Hostname ооо-рога-и-копыта.рф
        User Администратор
        ForwardX11 yes
        Compression yes
Host home
        Hostname myhome.dyndns.org
        User vasya
        PasswordAuthentication no

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



По подсказке

UUSER

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

Host *
User root
Compression yes

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


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

Теория: Графические приложения в юникс обычно используют X-сервер (wayland в пути, но всё ещё не готов). Это означает, что приложение запускается и подключается к X-серверу для рисования. Иными словами, если у вас есть голый сервер без гуя и есть локальный x-сервер (в котором вы работаете), то вы можете дать возможность приложениям с сервера рисовать у вас на рабочем столе. Обычно подключение к удалённом X-серверу — не самая безопасная и тривиальная вещь. SSH позволяет упростить этот процесс и сделать его совсем безопасным. А возможность жать трафик позволяет ещё и обойтись меньшим трафиком (т.е. уменьшить утилизацию канала, то есть уменьшить ping (точнее, latency), то есть уменьшить лаги).

Ключики: -X — проброс X-сервера. -Y проброс авторизации.

Достаточно просто запомнить комбинацию ssh -XYC user@SERVER.
В примере выше (названия компании вымышленные) я подключаюсь к серверу ооо-рога-и-копыта.рф не просто так, а с целью получить доступ к windows-серверу. Безопасность microsoft при работе в сети мы все хорошо знаем, так что выставлять наружу голый RDP неуютно. Вместо этого мы подключаемся к серверу по ssh, а дальше запускаем там команду rdesktop:
ssh ric
rdesktop -k en-us 192.168.1.1 -g 1900x1200

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



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

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

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

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

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

ssh -D 8080 user@server

В силу того, что чужие wifi чаще всего не только фиговые, но и лагливые, то бывает неплохо включить опцию -C (сжимать трафик). Получается почти что opera turbo (только картинки не жмёт). В реальном сёрфинге по http жмёт примерно в 2-3 раза (читай — если вам выпало несчастье в 64кбит, то вы будете мегабайтные страницы открывать не по две минуты, а секунд за 40. Фигово, но всё ж лучше). Но главное: никаких украденных кук и подслушанных сессий.

Я не зря сказал про закрытые порты. 22ой порт закрывают ровно так же, как «не нужный» порт джаббера. Решение — повесить сервер на 443-й порт. Снимать с 22 не стоит, иногда бывают системы с DPI (deep packet inspection), которые ваш «псевдо-ssl» не пустят.

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

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

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

Host vpn
    Hostname desunote.ru
    User vasya
    Compression yes
    DynamicForward 127.1:8080
    Port 443

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



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

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

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

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

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

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

ssh -R 127.1:80:8.8.8.8:8080 [email protected]

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

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

ssh -L 127.1:3333:127.1:3128 [email protected]

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

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

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

ssh -L 192.168.0.2:8080:10.1.1.1:80 [email protected]

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

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

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

Решение сложно:
ssh -L 192.168.0.2:8080:127.1:9999 [email protected] ssh -L 127.1:9999:127.1:80 [email protected]

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

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

Если предыдущий пример вам показался простым и очевидным, то попробуйте догадаться, что сделает этот пример:
ssh -D 8080 -R 127.1:8080:127.1:8080 [email protected] ssh -R 127.1:8080:127.1:8080 [email protected]

Если вы офицер безопасности, задача которого запретить использование интернета на сервере 10.1.1.2, то можете начинать выдёргивать волосы на попе, ибо эта команда организует доступ в интернет для сервера 10.1.1.2 посредством сокс-прокси, запущенного на компьютере «А». Трафик полностью зашифрован и неотличим от любого другого трафика SSH. А исходящий трафик с компьютера с точки зрения сети «192.168.0/24» не отличим от обычного трафика компьютера А.



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

Подробнее описано тут: www.khanh.net/blog/archives/51-using-openSSH-as-a-layer-2-ethernet-bridge-VPN.html

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

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

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

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

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

Повторю картинку:

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

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

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

ssh -A [email protected] ssh [email protected]

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

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

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

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

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

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

Настройка завязана на две возможности ssh: опцию -W (превращающую ssh в «трубу») и опцию конфига ProxyCommand (опции командной строки, вроде бы нет), которая говорит «запустить программу и присосаться к её stdin/out». Опции эти появились недавно, так что пользователи centos в пролёте.

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

.ssh/config:

Host raep
     HostName 10.1.1.2
     User user2
     ProxyCommand ssh -W %h:%p [email protected]

Ну а подключение тривиально: ssh raep.

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

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

Разумеется, в посте про туннели должен быть туннель, а в любой успешной статье — секретный ингредиент всеобщей популярности. Держите:


bitbucket — Зачем нужен SSH при работе с Git?

Заглянем в ProGit:

Git умеет работать с четырьмя сетевыми протоколами для передачи данных: локальный, SSH, «свой» протокол Git и HTTP[S].

Базовым протоколом является Локальный протокол, при использовании которого удалённым репозиторием считается просто каталог на диске. Не подходит для удалённого доступа через сеть, не считая частных случаев с использованием сетевых файловых систем (NFS, CIFS, etc.)

Наверное, наиболее часто используемый транспортный протокол — это SSH. Причина в том, что доступ по SSH, как правило, уже настроен в большинстве окружений. Кроме того, SSH — единственный из сетевых протоколов, предоставляющий доступ и на чтение, и на запись. Два других сетевых протокола (HTTP[S] и Git) в большинстве случаев дают доступ только на чтение, поэтому даже если они вам доступны, вам всё равно понадобится SSH для записи. К тому же SSH — протокол с аутентификацией и шифрованием трафика «из коробки». Недостаток SSH в том, что, используя его, вы не можете обеспечить анонимный доступ к репозиторию.

Другой вариант — «свой» Git-протокол. Вместе с Git’ом поставляется специальный демон, который слушает порт 9418 и предоставляет сервис, схожий с протоколом ssh, но абсолютно без аутентификации. Чтобы использовать Git-протокол для репозитория, вы должны создать файл git-daemon-export-ok, иначе демон не будет работать с этим репозиторием, но следует помнить, что в протоколе отсутствуют средства безопасности. Соответственно, любой репозиторий в Git’е может быть либо доступен для клонирования всем, либо не доступен никому. Как следствие, обычно вы не можете отправлять изменения по этому протоколу. Технически открыть доступ на запись можно, но из-за отсутствия авторизации в этом случае кто угодно, зная URL вашего проекта, сможет его изменить. Короче, это редко используемая возможность.

И последний вариант — HTTP[S]. Прелесть протоколов HTTP и HTTPS в простоте их настройки. По сути, всё, что необходимо сделать — поместить голый репозиторий внутрь каталога с HTTP документами, установить перехватчик post-update и всё. Обратной стороной использования протокола HTTP является его относительно низкая эффективность для клиента. Обычно клонирование или извлечение изменений из репозитория при использовании HTTP гораздо продолжительнее, а объем данных и нагрузка на сеть намного больше, чем у любого другого имеющегося сетевого протокола.

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

Автор, а Вы уверены, что у Вас «всё пушится» не с помощью ssh сейчас?

Git и SSH, какой ключ используется?



Допустим, ваш каталог .ssh содержит 30 ключей (15 частных и 15 открытых).

Где в Git можно проверить, какой из них используется для подключения к данному удаленному репозиторию?

git ssh
Поделиться Источник James Raitsev     19 июня 2012 в 01:46

7 ответов


  • Как указать, какой ключ SSH использовать в git для git push, чтобы иметь gitorious в качестве зеркала?

    У меня есть проект, размещенный на git.debian.org (alioth), и я хотел бы настроить крюк post-receive для обновления зеркала репозитория на http://gitorious.org Полагаю, мне придется использовать git push —mirror gitorious Теперь мне нужно будет получить разрешение Алиота на гиториусе, чтобы…

  • Git — ssh-ключ на сервере

    Я создал ssh-ключ на своем локальном компьютере и добавил открытый ключ в свою git-учетную запись. Работает как заклинание. Меня не просят вводить мое имя пользователя+пароль, когда я клонирую какой-либо репозиторий. Затем я ssh вошел на свой сервер и создал ssh-ключ таким же образом, а также…



74

Следующая запись в файле .ssh/config решает проблему

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Где ~/.ssh/whatever -путь к вашему закрытому ключу

Кроме того, пользователь и хост могут быть выбраны из

git push git@git._______________
         user host

Поделиться James Raitsev     19 июня 2012 в 02:20



70

Выполнение ssh в подробном режиме, он же ssh -v user@host , напечатает огромную нагрузку отладочной информации, которая также содержит сведения о том, какие файлы ключей он пытается использовать для входа в систему.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Теперь, если вы объедините это с шагом 4 на собственной странице справки Git SSH , ssh -vT [email protected] может дать вам ответ.

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

Поделиться Vajk Hermecz     19 мая 2014 в 05:59



10

Если он не указан в .ssh/config , он будет использовать файл закрытого ключа по умолчанию.

Файл по умолчанию- ~/.ssh/id_rsa , ~/.ssh/id_dsa или ~/.ssh/identity в зависимости от версии протокола.

Поделиться Rodrigo Flores     19 июня 2012 в 02:00



9

Я бы сказал, что наиболее практичным на мой вкус было бы:

GIT_SSH_COMMAND='ssh -v' git …

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

export GIT_SSH_COMMAND='ssh -v'
git …

— Как предполагает man git , существует несколько переменных окружения, которые могут повлиять на операции Git с использованием SSH. Согласно man ssh , вы можете получить некоторую отладочную информацию при развертывании опции -v (не только, но и, если вам интересно узнать больше, ознакомьтесь с руководством).

какой ключ используется?

В выходных данных вы увидите что-то вроде …

debug1: Offering public key: …

… что и является ответом на ваш q-n.

Поделиться poige     08 сентября 2019 в 08:20



6

Поскольку git просто использует ssh для подключения, он будет использовать любой ключ ssh для подключения к удаленному хосту. Подробности см. в файле ~/.ssh/config ; блок host использует директиву IdentityFile для указания используемого закрытого ключа. Страница ssh_config(5) содержит полную информацию.

Поделиться sarnold     19 июня 2012 в 01:51




5

Это может быть супер край, но после запуска ssh -vT [email protected] он показал мне, что проверяет /root/.ssh на наличие ключей, я ожидал, что он проверит мой домашний каталог, а затем я понял, что вошел в систему как root!

Поделиться Moak     01 ноября 2018 в 15:13



1

На удаленном сервере отредактируйте файл sshd_config, измените LogLevel с INFO на VERBOSE и перезапустите ssh.

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

На Ubuntu эти файлы:

/etc/ssh/sshd_config
/var/log/auth.log

но они могут отличаться в другом дистрибутиве. Просто погуглите их местоположение (некоторые используют, например, /var/log/secure).

Поделиться seumasmac     19 июня 2012 в 16:13


Похожие вопросы:


Git — ssh ключ / ip-адрес

Когда я настроил Git, я сделал это, используя модем dsl, и мой ip-адрес не статичен, поэтому, когда я сгенерировал ключи ssh для Git, он был основан на этом ip-адресе. Когда мне назначается…


ssh-ключ, используемый git Android Studio

Мне нужно подключиться к организации, и поэтому мне нужно предоставить открытый ssh-ключ. Однако я не уверен, какой ssh-ключ используется Android Studio. Я нахожу себя в замешательстве из-за…


Укажите ключ SSH для git push для данного домена

У меня есть следующий вариант использования: я хотел бы иметь возможность нажать на [email protected]:gitolite-admin , используя закрытый ключ пользователя gitolite-admin , в то время как я хочу…


Как указать, какой ключ SSH использовать в git для git push, чтобы иметь gitorious в качестве зеркала?

У меня есть проект, размещенный на git.debian.org (alioth), и я хотел бы настроить крюк post-receive для обновления зеркала репозитория на http://gitorious.org Полагаю, мне придется использовать git…


Git — ssh-ключ на сервере

Я создал ssh-ключ на своем локальном компьютере и добавил открытый ключ в свою git-учетную запись. Работает как заклинание. Меня не просят вводить мое имя пользователя+пароль, когда я клонирую…


Как git узнает, какой ключ ssh использовать для своих операций?

У меня есть SSH ключ на месте, внутри ~/.ssh . Многие из них на самом деле. Поэтому мне интересно, как git знает, какой из них взять, когда он пытается подключиться к репозиторию через конечную…


Какой открытый ключ ssh использовался для подключения к git

Я сгенерировал несколько ключей ssh и разместил их на сервере git. Можно ли каким-то образом узнать, какой ключ ssh был использован при выполнении команды git clone ?


Как я вижу, какой ключ ssh я использую при вытягивании с git pull?

Как я вижу, какой ключ ssh я использую при вытягивании с помощью git pull? Я вижу, как указать ключ с помощью ~/.ssh/config (…


Git ищет неправильный ключ SSH

Я решил попробовать использовать SSH для работы с моими репо GitHub. Я изменил remote url в git/.config, так что теперь он использует SSH: [remote origin] url =…


Как указать, какой ключ ssh использовать в git?

У меня есть 3 ключа ssh в моем аккаунте git. Windows (созданный с RSA и созданный с ED25519 ), Linux (созданный с RSA алго). Все три ключа имеют разные названия. Я использую git bash, и все команды…

Где GitHub для Windows хранит свой ключ SSH?



GitHub распространяет упрощенный клиент Git для Windows, который они называют GitHub для Windows; он аутентифицируется через учетную запись GitHub, и хотя он обычно использует удаленные устройства HTTPS для локальных репозиториев, которые он создает, если вы скажете ему использовать существующий локальный репозиторий, в котором есть удаленный сервер SSH на GitHub, он будет использовать ваши учетные данные GitHub для настройки ключа SSH в учетной записи GitHub для себя . Но где он хранит ключ SSH в файловой системе?

windows-7 ssh-keys github-for-windows
Поделиться Источник rakslice     26 ноября 2013 в 19:25

5 ответов


  • Создание ключа SSH для GitHub?

    У меня возникли проблемы с созданием ключей для GitHub. Я следую инструкциям из раздела Как использовать TortoiseGit . При создании ключа SSH для GitHub : Откройте PuTTygen, сгенерируйте ключ и сохраните его. Отметьте ключ в текстовой области и вставьте его в Настройки учетной записи github (SSH…

  • Где клиент ssh в git bash хранит файл known_hosts на windows?

    Я запускаю git bash на windows 7 и хотел бы удалить несколько хостов из файла known_hosts. Кажется, я нигде не могу найти каталог .ssh. Где клиент ssh, включенный в состав git bash, хранит свои известные хосты на Windows 7?



96

%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub — вот где ключ.

Поделиться neuro_tarun     26 января 2014 в 04:53



28

На моей работе PC он находится в %USERPROFILE%/.ssh/ , а не в %HOMEDRIVE%%HOMEPATH%/.ssh/ .

На многих компьютерах эти папки находятся в одном и том же месте, но это зависит от конфигурации. Таким образом, кажется, что %USERPROFILE% -это местоположение, используемое GitHub для Windows, которое также является домашним местоположением ~ для его Git Bash .

Это сбивает с толку, так как моя установка по умолчанию Windows Git использует %HOMEDRIVE%%HOMEPATH% в качестве домашнего местоположения ~ .

Поделиться t3hmun     08 июля 2014 в 12:26



13

Расположение по умолчанию: %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub . Это расширится до чего-то вроде C:\Users\dennis\.ssh\id_rsa.pub .

Если %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub уже существует, GitHub создает ключ с именем github_rsa (.pub) в той же папке.

Поделиться Dennis van der Schagt     30 мая 2014 в 21:32



5

Это в %HOMEDRIVE%%HOMEPATH%\.ssh .

Обратите внимание, что GitHub для Windows обычно использует SSL; ключи SSH не будут созданы, если вы в какой-то момент не использовали с ним репозиторий SSH.

Поделиться rakslice     26 ноября 2013 в 19:34



1

В моем доме Windows 10 путь к папке .ssh равен %HOMEDRIVE%%HOMEPATH%\AppData\Roaming\SPB_Data\.ssh

Поделиться runovskyi     30 октября 2018 в 09:58


Похожие вопросы:


Как я могу проверить свой ключ SSH на github?

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


Как настроить ключ Github SSH на втором компьютере

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


$ ssh-T git@github — отказано в разрешении (открытый ключ)

Я первый пользователь GitHub. Я установил Git для Windows, следуя инструкциям: http://help.github.com/win-set-up-git / Дошло до того, что был сгенерирован открытый ssh-ключ. Открыл Git Bash….


Создание ключа SSH для GitHub?

У меня возникли проблемы с созданием ключей для GitHub. Я следую инструкциям из раздела Как использовать TortoiseGit . При создании ключа SSH для GitHub : Откройте PuTTygen, сгенерируйте ключ и…


Где клиент ssh в git bash хранит файл known_hosts на windows?

Я запускаю git bash на windows 7 и хотел бы удалить несколько хостов из файла known_hosts. Кажется, я нигде не могу найти каталог .ssh. Где клиент ssh, включенный в состав git bash, хранит свои…


Где я могу найти ключ SSH, чтобы вставить его на GitHub?

Я следую руководству GitHub по генерации ключей SSH . Я нахожусь на Шаге 3 , подшаге5 Вставьте ключ в поле Key. Как именно мне найти ключ? Куда мне пойти, чтобы открыть его, а затем вставить на…


Кэширует ли Windows ключи SSH?

Недавно я опубликовал вопрос о том, что Git Bash ссылается на старое имя пользователя учетной записи GitHub. См. этот пост ЗДЕСЬ: Оригинальный пост Теперь я полностью убежден, что Windows каким-то…


Github: новый ключ SSH

Я очень мало знаю о SSH и т. д. Я пытался добавить новый ключ SSH на Github. Для этого я следовал этой процедуре: На Terminal work@Nirvair:~$ ssh-keygen -t rsa Generating public/private rsa key…


SSH ключ никогда не использовать на GitHub

Я использую GitHub для управления своим кодом. И я уже добавил свой открытый ключ ssh, который сгенерирован с помощью команды ssh-keygen . Тем не менее, он нуждается в том, чтобы я предоставил имя…


Github SSH ключ проигнорирован

У меня есть несколько (ну три) репозиториев Github. Я могу нажать на два из них, используя свой ключ SSH, не требуя имени пользователя / пароля. Однако с третьим меня каждый раз спрашивают о моем…

Аутентификация с помощью SSH ключей и отключение доступа по паролю

Что такое аутентификация с помощью SSH ключей, как она работает и для чего используют?

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

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

Публичный ключ вы можете добавить в разделе «Мои Серверы», вкладка «SSH-ключи».

 

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

 

 

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

 

Если на своём сервере вы настроили доступ с помощью SSH ключей, то панель автоматически загрузит открытый ключ в файл ~/.ssh/authorized_keys на вашем сервере. Когда пользователь попытается подключиться к серверу с помощью SSH-ключей, то он проверяет клиента на наличие у него закрытого ключа. Таким образом происходит аутентификация.

 

Как сгенерировать ключи?

В Windows это можно сделать с помощью Putty, скачиваем программу и запускаем файл puttygen.exe. Тип ключа выбираем RSA, а длину 2048 бит, нажимаем Generate, при генерации произвольно водим курсором мыши.

 

 

Сохраните сгенерированную пару ключей на компьютере, для этого используйте кнопки Save public key и Save private key. Не забудьте защитить закрытый ключ секретной фразой/паролем (необходимо ввести в поле Key passphrase/Confirm passphrase). Скопируйте сгененированный публичный ключ и вставьте его в соответствующее поле нашей панели управления.

 

 

В Linux или MacOS откройте терминал и выполните следующую команду

ssh-keygen -t rsa

 

Вы увидите следующий ответ компьютера

 

Enter file in which to save the key (/root/.ssh/id_rsa):

 

Вам необходимо нажать на клавишу Enter и ввести фразу/пароль для дополнительной защиты закрытого ключа, система попросит ввести его 2 раза

 

Enter passphrase (empty for no passphrase):

 

После этого ключ будет создан, а на консоль будет сообщение приблизительно такого содержания

 

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
bf:9b:79:ca:9f:96:bb:4c:b9:67:e9:e6:4d:1f:30:e1 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|             .   |
|            . .  |
|        S    E   |
|         .   .o  |
|          . o. o.|
|         . *+o=oo|
|          B*BOo o|
+-----------------+

 

Чтобы получить открытый ключ вводим в терминале команду

 

cat ~/.ssh/id_rsa.pub

 

Полученный ключ вводим в соответствующее поле нашей панели управления. В дальнейшем вы сможете подключаться со своего ПК к серверу с помощью команды

 

ssh root@[IP-адрес сервера]

 

Дополнительная защита сервера при использовании SSH ключей: отключение парольной аутентификации

ВНИМАНИЕ! Прежде чем выполнять этот пункт обязательно проверьте работу SSH ключей и входа на сервер по ним.

Если у вас вышло подключиться к серверу с помощью SSH-ключей, то в качестве дополнительной меры безопасности можно отключить аутентификацию через пароль. Для этого открываем конфигурационный файл демона SSH /etc/ssh/sshd_config и раскомментируем директиву PasswordAuthentication,  а также установим ей значение no.

 

PasswordAuthentication no

 

Сохраняем изменения и перезапускаем сервис

 

# Ubuntu/Debian
sudo systemctl restart ssh
# CentOS/Fedora
sudo service sshd restart

 

Что такое ключи SSH? — JumpCloud

Обновлено 21 сентября 2021 г.

Если вы проводите достаточно времени в ИТ-среде и с развитием облачной инфраструктуры, такой как AWS, вы, вероятно, встретите термин «ключи SSH». Если вы уже сталкивались с этим термином, связанным с ИТ, то, возможно, задаетесь вопросом, что такое ключи SSH?

Ключи

SSH (Secure Shell) — это учетные данные для доступа, которые используются в протоколе SSH, и они лежат в основе современных платформ «Инфраструктура как услуга», таких как AWS, Google Cloud и Azure.

Прежде чем этот пост углубится в объяснение того, что такое ключи SSH, давайте кратко рассмотрим протокол SSH.

История протокола SSH

Первая версия протокола SSH была разработана летом 1995 года Тату Илоненом. Тату был исследователем в Университете Хельсинки, когда в университетской сети была обнаружена атака сниффинга. Атака сниффинга перехватывает и регистрирует трафик, который происходит в сети, и может предоставить злоумышленникам имена пользователей и пароли, которые затем могут быть использованы для получения доступа к критически важным ИТ-активам.

Были затронуты тысячи учетных данных, в том числе принадлежащих общественным партнерствам. Эта атака сниффинга побудила «Тату» выяснить, как сделать сети более безопасными, и в конечном итоге это привело к созданию протокола SSH (SSH.com).

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

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

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

Что такое ключи SSH?

Ключи SSH

бывают разных размеров, но популярным выбором является 2048-битное шифрование RSA, которое сравнимо с паролем длиной 617 цифр. В системах Windows можно сгенерировать свою собственную пару ключей SSH, загрузив и используя клиент SSH, например PuTTY.

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

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

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

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

Как работают ключи пользователя

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

Закрытые ключи никогда не должны передаваться кому-либо и должны быть защищены в системе — i.е. система защищена (полное шифрование диска, MFA) в распоряжении пользователя, а закрытый ключ защищен парольной фразой.

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

Использование ключей SSH

Первые шаги — создание ключа SSH

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

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

Как работает аутентификация по ключу SSH

После выполнения шагов, упомянутых выше, с помощью терминала введите свое имя пользователя ssh и IP-адрес удаленной системы в следующем формате: ssh username @ my_ip_address .Это инициирует соединение с удаленной системой по протоколу SSH.

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

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

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

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

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

Несмотря на сложность попыток вручную управлять миллионами ключей SSH, наличие системы управления ключами SSH постоянно игнорируется. SSH.com немного покопался и обнаружил компанию, у которой было 3 миллиона ключей SSH, «которые предоставляли доступ к действующим производственным серверам.

Из них 90% больше не использовались. Root-доступ давали 10% ключей ».Действующая эффективная система управления ключами SSH значительно снизила бы этот риск для безопасности.

У

IT есть несколько вариантов получения контроля над ключами SSH в своей среде. Один из них включает использование инструмента управления ключами SSH. Однако это означает необходимость управления еще одной платформой в дополнение к управлению поставщиком единого входа, службой каталогов и, возможно, решением для управления системой. Появилось новое решение, которое предоставляет ИТ-специалистам второй вариант: платформу JumpCloud Directory.

Cloud IAM предлагает управление ключами SSH

Это облачное решение для управления идентификацией и доступом предоставляет ИТ-специалистам единое централизованное место для управления ключами SSH. Кроме того, ИТ-отдел также может централизовать аутентификацию пользователей на устройствах Mac, Linux и Windows, облачных серверах, проводных и Wi-Fi сетях, веб-приложениях и локальных приложениях, а также виртуальных и локальных хранилищах. Имея единое централизованное место для управления аутентификацией пользователей для всех их ресурсов, можно всего за несколько щелчков мышью отключить пользователей от всех их ресурсов, включая доступ по SSH-ключу к удаленным системам.

Подробнее об управлении ключами SSH с помощью JumpCloud

Приглашаем вас связаться с нами, если вам нужна дополнительная информация о том, как платформа JumpCloud Directory может упростить управление ключами SSH. Если вы готовы начать тестирование нашей современной платформы IAM, зарегистрируйтесь для получения бесплатной учетной записи. Вы сможете изучить все наши функции, а ваши первые 10 пользователей и 10 устройств будут бесплатными. Мы также будем рады помочь вам 24 часа в сутки 7 дней в неделю с нашей премиальной поддержкой в ​​чате в течение первых 10 дней.

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

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

SSH-ключи — это учетные данные для аутентификации

SSH (Secure Shell) используется для управления сетями, операционными системами и конфигурациями.Он также находится внутри многих инструментов передачи файлов и инструментов управления конфигурацией. Каждая крупная корпорация использует его в каждом центре обработки данных.

Ключи

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

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

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

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

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

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

Ключи идентификации идентифицируют пользователей и обеспечивают доступ

Ключи идентификации — это закрытые ключи, которые SSH-клиент использует для аутентификации при входе на SSH-сервер. Они аналогичны физическим ключам, которые могут открывать один или несколько замков.

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

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

Аутентификация пользователя на основе сертификата

Сертификаты

PKI также могут использоваться для аутентификации. В этом случае у пользователя все еще есть закрытый ключ, но также есть сертификат, связанный с ключом. Технология поддерживается как в Tectia SSH, так и в OpenSSH, с некоторыми отличиями. Дополнительные сведения см. На специальной странице, посвященной проверке подлинности на основе сертификатов в SSH.

Ключи аутентификации устройства

Ключи хоста аутентифицируют серверы

Ключи хоста используются для аутентификации хостов, т.е.е., компьютеры. Их цель — предотвратить атаки типа «злоумышленник посередине». См. Дополнительную информацию на отдельной странице о ключах хоста.

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

Известные ключи хоста

Одной из уникальных особенностей SSH является то, что по умолчанию он доверяет и запоминает ключ хоста при первом подключении к нему.Это было ключевым отличием, которое позволило развернуть SSH на низовом уровне, поскольку в 1995 году не было централизованной инфраструктуры ключей для хостов, и ее нет до сих пор (2017 год), за исключением сертификатов SSL для веб-серверов. В результате простота развертывания стала одной из основных причин успеха SSH.

Запомненные ключи хоста называются известными ключами хоста , и они хранятся в файле с именем known_hosts в OpenSSH. Пока ключи хоста не меняются, этот appoach очень прост в использовании и обеспечивает довольно хорошую безопасность.Однако в большой организации и при изменении ключей обслуживание файлов известных хостов может занять очень много времени. В этом случае рекомендуется использовать сертификаты для ключей хоста. Tectia SSH поддерживает стандартные сертификаты X.509 для хостов. OpenSSH имеет собственный формат сертификатов. Преимущество стандартных сертификатов заключается в том, что они могут быть выданы любым центром сертификации (ЦС), в то время как надежных ЦС для ключей OpenSSH не существует. См. Дополнительную информацию на специальной странице о сертификатах с SSH.

Сессионные ключи

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

Как настроить аутентификацию на основе ключей

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

Как настроить аутентификацию с открытым ключом для OpenSSH

Ключи

SSH обычно настраиваются в файле authorized_keys в подкаталоге .ssh в домашнем каталоге пользователя. Обычно системный администратор сначала создает ключ с помощью ssh-keygen , а затем устанавливает его в качестве авторизованного ключа на сервере с помощью инструмента ssh-copy-id .См. Также специальную страницу о настройке авторизованных ключей для OpenSSH.

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

Хранение ключей в ssh-agent для единого входа

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

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

Чтобы включить переадресацию агента, установите AllowAgentForwarding на yes в / etc / ssh / sshd_config на сервере и ForwardAgent с на yes в файле конфигурации клиента / etc / ssh / ssh_config.

Рекомендуемые размеры ключей

Мы рекомендуем выбирать размеры ключей в соответствии с NIST SP 800-57. Размеры ключей по умолчанию, используемые инструментом ssh-keygen , обычно имеют приемлемую силу. Фактически, поскольку протокол никогда не раскрывает открытые ключи, приемлемые для аутентификации пользователя, алгоритмы, используемые для ключей, не так важны, как, например, в сертификатах PKI.

Для ключей RSA 2048 бит, вероятно, сегодня хороший выбор (2017). Однако многие криптографы теперь рекомендуют перейти на ключи ECDSA и считают, что успехи в факторинге больших целых чисел могут сделать ключи RSA уязвимыми в ближайшей / среднесрочной перспективе.Для ECDSA мы рекомендуем использовать 521-битные (sic!) Ключи, хотя 384 или даже 256-битные ключи, вероятно, будут безопасными. Практической пользы от использования клавиш меньшего размера просто нет.

Расположение ключа идентификации

Ключи идентификации обычно хранятся в каталоге пользователя .ssh , например, .ssh / ssh_id_rsa . Имя файла ключа идентификации по умолчанию начинается с id_ <алгоритм> . Однако при создании закрытого ключа можно указать любое имя файла и любое местоположение, а также указать путь с параметром -i для клиента SSH.Например, ssh -i / home / ylo / secure / my-key [email protected] будет использовать закрытый ключ из файла my-key для аутентификации.

Расположение ключа идентификации по умолчанию также можно настроить в / etc / ssh / ssh_config или в файле .ssh / config пользователя с помощью параметра IdentityFile .

Авторизованный ключевой адрес

Когда пользователь пытается войти в систему с использованием аутентификации на основе ключей, сервер OpenSSH ищет авторизованные ключи из каталога, указанного в конфигурации сервера, с помощью параметра AuthorizedKeysFile .По умолчанию это .ssh / authorized_keys в домашнем каталоге пользователя.

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

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

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

Перемещение ключей SSH в корневое расположение

В принципе, переместить ключи SSH в корневое расположение очень просто:

  1. Создайте подходящий корневой каталог, e.g., / etc / ssh / keys , под которым хранятся авторизованные ключи.

  2. Создайте подкаталог в этом каталоге для каждого пользователя и переместите файл authorized_keys каждого пользователя в / etc / ssh / keys / / authorized_keys .

  3. Наконец, измените набор AuthorizedKeysFile / etc / ssh / keys /% u / authorized_keys в / etc / ssh / sshd_config .

Однако на практике это не всегда так просто, особенно в больших средах.Имена пользователей могут поступать из каталогов (например, Active Directory или LDAP). Многие организации имеют разные версии OpenSSH, включая очень старые системы или пользовательские сборки SSH с нестандартными встроенными путями. Мы рекомендуем использовать инструменты управления ключами, такие как Universal SSH Key Manager, чтобы скрыть эту сложность в более крупных средах. Эти инструменты также могут реализовать рабочий процесс подготовки, завершения и утверждения ключей и предупреждений о неавторизованных изменениях, сделанных пользователями root.

Ограничение OpenSSH на количество закрытых ключей

Сервер OpenSSH имеет функцию (я бы назвал это ошибкой), которая считает, что проверка того, может ли конкретный ключ использоваться для аутентификации, является попыткой аутентификации.Это приводит к тому, что если у пользователя более пяти ключей в .ssh , только некоторые из них работают. Это часто приводит к сбою аутентификации на основе ключей, и пользователям часто трудно это понять. Чтобы обойти это, нужно явно указать используемый закрытый ключ с помощью параметра -i . Альтернативой является настройка сеанса MaxAuthTries на сервере, но это не полное решение, и нежелательно увеличивать количество попыток аутентификации по паролю.

Как выглядят ключи SSH

Авторизованный ключ может выглядеть так:

  ECDSA-SHA2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBN + Mh4U / 3We4VYtV1QmWUFIzFLTUeegl1Ao5 / QGtCRGAZn8bxX9KlCrrWISIjSYAwCajIEGSPEZwPNMBoK8XD8Q = ыло @ Klar  

Идентификационный ключ может выглядеть так:

  ----- НАЧАТЬ EC PRIVATE KEY ----- MHcCAQEEIJWbvSW7h50HPwG + bWR3DXgQ6YhOxYbe0ifr1rRUvsUuoAoGCCqGSM49 AwEHoUQDQgAE34yHdT / dZ7hVi1XVCZZQUjMUtNR56CXUCjn9Aa0JEYBmfxvFf0qU KutYhIiNJgDAJqMgQZI8RnA80wGgrxcPxA == ----- END EC PRIVATE KEY -----  

Как работает аутентификация в SSH?

Инициализация соединения по SSH состоит из:

  • Согласование версии протокола для использования

  • Согласование криптографических алгоритмов и других вариантов использования

  • Согласование одноразового сеансового ключа для шифрования остальной части сеанса

  • Аутентификация хоста сервера с помощью его ключа хоста

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

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

Аутентификация с открытым ключом

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

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

Насколько распространены ключи SSH и каков риск

Ключ

SSH оказался чрезвычайно распространенным и широко используемым.Многие крупные организации накапливали их за двадцать лет без всякого контроля. Типичное предприятие из списка Fortune 500 имеет несколько миллионов ключей, предоставляющих доступ к своим серверам. В одном случае с клиентом мы проверили 500 приложений и 15 000 серверов и нашли 3 000 000 авторизованных ключей и 750 000 уникальных пар ключей. У этой организации также было более пяти миллионов ежедневных входов в систему с использованием ключей. Ключи использовались для выполнения финансовых транзакций, обновления конфигураций, перемещения данных журнала, передачи файлов, интерактивного входа системных администраторов и многих других целей.

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

Как полностью удалить ключи SSH

PrivX On-Demand Access Manager можно использовать для полного удаления ключей SSH с серверов и установления контроля доступа на основе политик и ведения журнала сеансов на предприятии. Это также устраняет большую часть административной нагрузки при управлении ключами, сохраняя при этом преимущества: автоматизацию и единый вход.

Что такое управление ключами Secure Socket Shell (SSH)? Прочтите определение в нашем глоссарии по безопасности

Secure Socket Shell (SSH) Key Management, также называемый Secure Shell Management, представляет собой специальный сетевой протокол, использующий криптографию с открытым ключом, позволяющую авторизованным пользователям получать удаленный доступ к компьютеру или другому устройству с помощью учетных данных, называемых ключами SSH. Поскольку они используются для доступа к конфиденциальным ресурсам и выполнения критически важных действий с высоким уровнем привилегий, очень важно правильно управлять ключами SSH, как и другими конфиденциальными учетными данными.

Хотя ключи SSH являются стандартными и чаще используются в средах Unix и Linux, они также используются в системах Windows.

Обзор аутентификации безопасности ключа SSH

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

Технология

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

  • Вход на удаленные компьютеры / серверы для поддержки и обслуживания

  • Передача файлов с компьютера на компьютер

  • Удаленное выполнение команд

  • Поддержка и обновления

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

Преимущества аутентификации ключа SSH

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

Ключи SSH

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

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

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

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

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

Доступ по ключу SSH

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

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

Распространение ключей SSH создает риск для безопасности и эксплуатации

Разрастание ключей SSH

подвергает организации значительному кибер-риску, особенно с учетом того, что они могут обеспечить такой высокий уровень привилегированного доступа, как root.Обычно при 50–200 ключей SSH на сервер организации могут иметь до миллиона ключей SSH. Хотя многие из этих ключей SSH давно бездействуют и забыты, они могут предоставить хакерам лазейку для проникновения на критически важные серверы. И как только сервер и ключ SSH будут взломаны, злоумышленник может переместиться в сторону и найти больше скрытых ключей.

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

Рекомендации по обеспечению безопасности ключей SSH

Как и в случае с любыми другими протоколами безопасности, крайне важно поддерживать строгие стандарты и передовой опыт в отношении сетевых протоколов и ключей SSH. NIST IR 7966 предлагает руководство для государственных организаций, предприятий и аудиторов по надлежащему контролю безопасности для реализаций SSH. Рекомендации NIST делают упор на обнаружение, ротацию, использование и мониторинг ключей SSH.

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

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

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

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

  2. Убедитесь, что ключи SSH связаны с одним человеком: Привяжите ключи SSH к отдельному человеку, а не только к учетной записи, к которой могут получить доступ несколько пользователей. Это обеспечит эффективный аудит SSH и более прямой контроль.

  3. Обеспечение минимальных уровней прав пользователей с помощью PoLP: Применяйте принцип наименьших привилегий (PoLP), например, при привязке ключей SSH к детализированным областям удаленных устройств, чтобы пользователи могли получить доступ только к определенным необходимым системам.Это ограничивает возможные последствия неправильного использования ключей SSH.

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

  5. Устранение жестко запрограммированных ключей SSH: Ключи SSH — это один из многих типов учетных данных, которые могут быть встроены в код, например, в приложения и файлы.Такая практика создает опасные лазейки для вредоносных программ и хакеров. Встроенные ключи, в которых используются простые или стандартные парольные фразы, могут быть уязвимы для подбора пароля и других атак. Следовательно, важной частью безопасности SSH является обнаружение и удаление встроенных ключей SSH и их централизованное управление.

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

Что такое ключ SSH?

Что такое ключ SSH? Генерация, аутентификация, информация о паре ключей и многое другое

Ключ SSH — это учетные данные безопасного доступа, используемые в протоколе Secure Shell (SSH).В ключах SSH используются пары ключей, основанные на технологии инфраструктуры открытых ключей (PKI), золотом стандарте аутентификации и шифрования цифровой идентификации, чтобы обеспечить безопасный и масштабируемый метод аутентификации. Поскольку протокол SSH широко используется для связи в облачных сервисах, сетевых средах, инструментах передачи файлов, инструментах управления конфигурацией и других компьютерно-зависимых сервисах, большинство организаций используют ключи SSH для аутентификации личности и защиты этих сервисов от непреднамеренного использования или злонамеренных атак.Ключи SSH не только повышают безопасность, но и позволяют автоматизировать связанные процессы, единый вход (SSO), а также управление идентификацией и доступом в таком масштабе, который требуется сегодняшнему бизнесу.

Зачем использовать ключи SSH, а не пароли?

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

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

Используя криптографическую стойкость и методы аутентификации PKI, ключи SSH не подвержены злонамеренным атакам, а действительные учетные данные не раскрываются, если система или сервер были скомпрометированы. Криптография PKI постоянно совершенствуется, обеспечивая защиту идентификационных данных от новых и развивающихся угроз в будущем. А аутентификация по ключу SSH удобнее аутентификации по паролю. Ключи SSH соединяют пользователей и процессы с сервером, инициируя аутентификацию и автоматически предоставляя доступ, поэтому пользователям не нужно запоминать или вводить свой пароль для каждой системы.

Как SSH использует закрытые и открытые ключи?

Ключ SSH основан на использовании двух связанных ключей, открытого и закрытого ключей, которые вместе создают пару ключей, которая используется в качестве учетных данных безопасного доступа. Закрытый ключ является секретным, известен только пользователю и должен быть зашифрован и надежно храниться. Открытый ключ может быть свободно передан любому серверу SSH, к которому пользователь желает подключиться. Эти ключи обычно управляются ИТ-отделом организации или, что еще лучше, с помощью доверенного центра сертификации (ЦС) для обеспечения их безопасного хранения.

Для создания цифровой идентичности генерируются как открытый, так и закрытый ключи, и пара связывается друг с другом с использованием надежного алгоритма криптографии с открытым ключом. Наиболее распространенными математическими алгоритмами, используемыми для генерации ключей SSH, являются алгоритм Ривеста – Шамира – Адлемана (RSA) и алгоритм цифровой подписи с эллиптической кривой (ECDSA).

Эти алгоритмы используют различные методы вычислений для генерации случайных числовых комбинаций различной длины, так что они не могут быть использованы с помощью грубой силы.Размер ключа или длина в битах ключей SSH помогает определить степень защиты. 2048-битные ключи RSA или 521-битные ключи ECDSA обладают достаточной криптографической стойкостью, чтобы хакеры не взломали алгоритм.

Как работает аутентификация с использованием пары ключей SSH?

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

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

Создание и сохранение вручную

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

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

Вот шаги командной строки для генерации ключа SSH:

  1. Введите команду генерации ключей $ ssh-keygen -t rsa
  2. Введите файл, в котором нужно сохранить ключи.Обычно ключи хранятся в домашнем каталоге или каталоге ~ / .ssh / (например, /home/foldername/.ssh/id_rsa или /c/Users/username/.ssh/id_rsa)
  3. Введите необязательную кодовую фразу или оставьте поле пустым без проходной фазы. Примечание. Парольная фраза обеспечивает дополнительный уровень защиты паролем пары ключей, но пользователь должен вводить парольную фразу каждый раз, когда используется пара ключей.

После создания пары ключей следующим шагом будет размещение открытого ключа SSH на удаленном сервере. Системный администратор может скопировать открытый ключ в файл authorized_keys удаленного сервера с помощью команды ssh-copy-id (например,грамм. $ ssh-copy-id имя пользователя @ IP-адрес). Кроме того, вы можете вставить ключи с помощью безопасной команды оболочки (например, $ cat ~ / .ssh / id_rsa.pub | ssh username @ IP address «mkdir -p ~ / .ssh && chmod 700 ~ / .ssh && cat >> ~ /.ssh/authorized_keys «).

Как вы управляете ключами SSH?

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

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

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

Узнайте больше об автоматизации управления ключами SSH, послушав этот выпуск подкаста Sectigo’s Root Causes.

SSH | SSH-ключи | Что такое ключи SSH?

Что такое SSH?

Secure Socket Shell (SSH), также известный как Secure Shell, представляет собой криптографический протокол, который использует для работы криптографию с открытым ключом.Его основная цель — защитить удаленные частные транзакции через Интернет путем обеспечения аутентификации как на стороне сервера, так и на стороне клиента, чтобы установить зашифрованный канал между обеими сторонами связи. Вот некоторые типичные области, в которых применяется аутентификация на основе ключей SSH:

  • Удаленный вход в защищенные системы
  • Передача файлов из системы в систему
  • Автоматический вход для доступа к серверу

Одним из самых больших преимуществ использования ключей SSH является их устойчивость к кибер-эксплойтам — например, атакам методом грубой силы.Это связано с тем, что протокол SSH не требует, чтобы пароли открывались через Интернет. Это одна из его самых сильных сторон по сравнению с его предшественниками (Telnet, rlogin, rexec и т. Д.), Поскольку эти протоколы требовали, чтобы пароли передавались в виде простого текста, что делало их уязвимыми для перехвата.

2. Как работает SSH?

2.1. Сертификаты SSH и SSL / TLS — в чем разница?

Асимметричное шифрование является ключевым компонентом как ключей SSH, так и сертификатов SSL / TLS (сертификатов x.509).Хотя их способы работы могут быть похожи, они работают совершенно по-разному. Сертификаты

x.509 требуют, чтобы пары ключей, используемые в процессе асимметричного шифрования, были прикреплены к цифровому сертификату, который имеет цифровую подпись доверенного органа выдачи (центров сертификации или ЦС). Без сертификата, сопровождающего открытый ключ, протоколы SSL / TLS нельзя безопасно использовать в Интернете.

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

Важным преимуществом SSH перед SSL / TLS является тот факт, что он обеспечивает высокозащищенный удаленный доступ к серверам и устройствам. С другой стороны, аутентификация на основе сертификата x.509 должна быть развернута вместе с другими протоколами, такими как FTP (протокол передачи файлов), для достижения такого уровня функциональности. Это ожидаемое ограничение, поскольку x.Сертификаты 509 обеспечивают безопасность для чрезвычайно больших объемов трафика, которые обычно не требуют такой специализированной функциональности (например, посетители на веб-сайте покупок), в то время как ключи SSH используются только внутри или между группами ИТ / безопасности организаций.

2.2. Работа с ключами SSH

SSH работает по модели клиент / сервер, где «SSH-клиент» — это система, требующая удаленного доступа, а «SSH-сервер» — тот, который предоставляет его, тем самым создавая безопасный канал с помощью ключей Secure Shell.Сегодня доступно несколько клиентских программ SSH (некоторые из них — puTTY, wolfSSH и SecureCRT), которые можно использовать в зависимости от платформы, для которой они требуются.

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

Этап 1: Генерация общего секрета

  1. Подтверждение связи TCP инициируется клиентом, во время которого он проверяет свою идентичность на сервере, и обе стороны соглашаются, какие протоколы шифрования должны соблюдаться.
  2. Сервер представляет свой открытый ключ, чтобы подтвердить свою личность клиенту.
  3. «Ключ сеанса» создается обеими сторонами совместно с использованием алгоритма Диффи-Хеллмана, который будет использоваться для шифрования всего сеанса. Здесь общедоступные и частные данные как от сервера, так и от клиента объединяются для создания этого сеансового ключа или «общего секрета», который является симметричным ключом (т.е. один и тот же ключ может использоваться для шифрования и дешифрования информации)
  4. Симметричное шифрование устанавливается с помощью сеансового ключа, который защищает транзакцию от внешнего перехвата.

Этап 2: Аутентификация клиента

  1. Сервер аутентифицирует клиента либо путем получения зашифрованного пароля, либо с помощью ключей SSH. Поскольку пароли менее безопасны, чем ключи SSH, из-за их уязвимости для атак методом грубой силы, рекомендуется использовать последний.
  2. Аутентификация на основе ключей SSH начинается с того, что клиент сообщает серверу учетные данные пары ключей, с которой он хотел бы аутентифицироваться. В этом случае и сервер, и клиент имеют соответствующие открытые ключи.
  3. Сервер проверяет наличие этой пары ключей в своей базе данных, а затем использует свой открытый ключ для шифрования сообщения и отправляет его клиенту.
  4. Клиент расшифровывает сообщение своим соответствующим закрытым ключом, а затем объединяет базовое значение с сеансовым ключом для создания хэш-значения.
  5. Он отправляет хеш-значение обратно на сервер.
  6. Сервер получает это хеш-значение, а затем создает свое собственное хеш-значение (используя исходное незашифрованное сообщение и общий сеансовый ключ).Если оба значения хеш-функции совпадают, сервер принимает это как доказательство того, что клиент является владельцем закрытого ключа, и предоставляет ему аутентификацию.
  7. После установления аутентификации обе стороны открывают зашифрованный канал для связи друг с другом.

3. Использование SSH в вашей организации

3.1. Риски использования

Поскольку нет руководящего органа, регулирующего использование ключей SSH, существует компонент риска, основанного на неопределенности. Ключи SSH генерируются на специальной основе, что создает возможность разрастания ключей (т.Некоторые ключи могут быть отброшены и оставлены неуправляемыми, если они больше не используются). Более того, отсутствие определенных процессов управления учетными данными SSH означает отсутствие конкретной инвентаризации. Крупные организации обычно имеют значительное количество ключей SSH в файле — оставленные неуправляемыми, они могут стать потенциальными лазейками в сети или стать объектами кражи или взлома данных.

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

3.2. Лучшие практики управления ключами

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

Получить видимость:

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

Rotate Keys:

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

Политика аудита и обеспечения соблюдения:

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

Управление доступом с помощью разрешений:

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

Избегайте жесткого кодирования ключей:

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

Давайте приступим к процессу автоматизации сертификатов

SSH-ключей для GitHub

Цели
  • Объясните, что такое SSH-ключ
  • Создайте свою собственную пару ключей SSH
  • Добавьте свой SSH-ключ в свою учетную запись GitHub
  • Узнайте, как использовать ключ SSH в рабочем процессе GitHub.
Зачем нужен ключ SSH?

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

Ключи SSH

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

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

Создание пары ключей SSH

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

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

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

Если вы не видите id_rsa.pub , используйте следующую команду для создания новой пары ключей. Обязательно замените [email protected] своим адресом электронной почты.

  $ ssh-keygen -o -t rsa -C "ваш @ адрес электронной почты.com "
  

(Параметр -o был добавлен в 2014 году; если эта команда вам не подходит, просто удалите -o и повторите попытку)

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

  Создание пары открытого / закрытого ключей RSA.
Введите файл, в котором нужно сохранить ключ (/Users/username/.ssh/id_rsa):
  

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

  Введите кодовую фразу (пусто, если кодовая фраза отсутствует):
  
  Введите ту же парольную фразу еще раз:
  

Когда генерация ключа будет завершена, вы должны увидеть следующее подтверждение:

  Ваш идентификатор был сохранен в /Users/username/.ssh/id_rsa.
Ваш открытый ключ был сохранен в /Users/username/.ssh/id_rsa.pub.
Ключевой отпечаток пальца:
01: 0f: f4: 3b: ca: 85: d6: 17: a1: 7d: f0: 68: 9d: f0: a2: db [email protected]
Изображение ключа randomart:
+ - [RSA 2048] ---- +
| |
| |
| .E + |
| . о =. |
| . S = o |
| o.O. о |
| о. +. |
| . о + .. |
| . + = o |
+ ----------------- +
  

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

Добавьте свой открытый ключ в GitHub

Теперь нам нужно сообщить GitHub о вашем открытом ключе. Отобразите содержимое вашего нового файла открытого ключа с помощью cat :

Результат должен выглядеть примерно так:

  SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEA879BJGYlPTLIuc9 / R5MYiN4yc / YiCLcdBpSdzgK9Dt0Bkfe3rSz5cPm4wmehdE7GkVFXrBJ2YHqPLuM1yx1AUxIebpwlIl9f / aUHOts9eVnVh5NztPy0iSU / Sv0b2ODQQvcy2vYcujlorscl8JjAgfWsO3W4iGEe6QwBpVomcME8IU35v5VbylM9ORQa6wvZMVrPECBvwItTY8cPWh4MGZiK / 74eHbSLKA4PY3gM4GHI450Nie16yggEg2aTQfWA1rry9JYWEoHS9pJ1dnLqZU3k / 8OWgqJrilwSoC5rGjgp93iu0H8T6 + mEHGRQe84Nk1y5lESSWIbn6P636Bl3uQ == ваш @ адрес электронной почты.ком
  

Скопируйте содержимое вывода в буфер обмена.

Войдите на github.com и откройте настройки своей учетной записи, щелкнув значок инструментов.

Выберите SSH Keys из бокового меню, затем нажмите кнопку Add SSH key .

Назовите свой ключ как угодно и вставьте содержимое буфера обмена в текстовое поле Key .

Наконец, нажмите Добавить ключ для сохранения.Если будет предложено, введите свой пароль на github.

#### Использование ключа SSH

В дальнейшем вы можете использовать URL-адрес клона SSH при копировании репо на локальный компьютер.

Это позволит вам не вводить имя пользователя и пароль для будущих команд GitHub.

Ключевые моменты
  • SSH — безопасная альтернатива авторизации по имени пользователя и паролю
  • SSH-ключи генерируются в парах публичный / приватный. Ваш открытый ключ может быть передан другим.Закрытые ключи остаются только на вашем компьютере.
  • Вы можете авторизоваться на GitHub через SSH, поделившись своим открытым ключом с GitHub.

Как использовать ключи SSH для аутентификации — Урок

Настройте свои первые ключи SSH

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

Следуйте нашему руководству и узнайте, как настроить свои первые ключи SSH для аутентификации с помощью OpenSSH или PuTTYTray.

Попробуйте UpCloud бесплатно! Разверните сервер всего за 45 секунд

Подготовка сервера

Чтобы добавить пару ключей SSH, сначала создайте скрытую папку в домашнем каталоге вашей учетной записи на облачном сервере с помощью следующей команды.

 mkdir -p ~ / .ssh 

Затем ограничьте права доступа к этому каталогу только себе с помощью приведенной ниже команды.

 chmod 700 ~ / .ssh 

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

Использование OpenSSH для создания пары ключей

Теперь продолжайте на своем компьютере, если вы используете Linux или любую другую ОС с OpenSSH. Пользователи PuTTY должны перейти к следующему разделу.

1. Создайте новую пару ключей в терминале с помощью следующей команды

 ssh-keygen -t rsa 

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

2. (Необязательно) Создайте парольную фразу для ключа, когда будет предложено

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

3. Скопируйте открытую половину пары ключей на свой облачный сервер, используя следующую команду

Замените пользователя и сервер своим именем пользователя и адресом сервера, на котором вы хотите использовать ключ аутентификации.

 ssh-copy-id -i ~ / .ssh / id_rsa.pub пользователь @ сервер 

Это также предполагает, что вы сохранили пару ключей, используя имя и расположение файла по умолчанию. Если нет, просто замените ключевой путь ~ /.ssh / id_rsa.pub выше с вашим собственным именем ключа.

При появлении запроса введите пароль своей учетной записи для этого SSH-сервера.

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

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

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

 ssh-агент $ BASH
ssh-add ~ /.ssh / id_rsa 

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

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

Использование PuTTYTray для создания пары ключей

Если вы используете Windows и PuTTYTray для SSH, вы можете использовать встроенный генератор ключей от PuTTY для создания новой пары ключей.

1. Нажмите кнопку Keygen в нижней части окна PuTTY Configuration , чтобы начать работу.

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

2. Чтобы начать, нажмите кнопку Создать .

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

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

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

5. Нажмите Сохранить закрытый ключ кнопку и сохраните его в надежном месте. Как правило, любое место в вашем пользовательском каталоге нормально, если ваш компьютер защищен паролем. Перед закрытием кейгена вы можете скопировать открытый ключ в буфер обмена, но вы всегда можете получить его и позже.

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

6. Нажмите кнопку Agent , чтобы открыть диспетчер ключей в окне конфигурации PuTTY.

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

Введите ключевую фразу-пароль, если ее спросят.

Это будет импортировать ключ в ваш клиент PuTTY, но вам все равно нужно скопировать открытый ключ на свой сервер.

8. Откройте SSH-соединение с облачным сервером и перейдите в каталог ключей SSH.

 кд ~ / .ssh / 

9. Откройте или создайте файл по умолчанию. OpenSSH ищет открытые ключи с именем authorized_keys.

 sudo nano authorized_keys 

10. Вставьте открытый ключ в файл , просто щелкнув правой кнопкой мыши окно клиента SSH. Убедитесь, что ключ находится в одной строке, чтобы OpenSSH мог его прочитать. Обратите внимание, что также необходимо указать тип ключа ssh-rsa, как показано в примере ниже.

 SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABgQDEeV / UKOVqNUwmED8PO1E6wY3ITEbWx30rAgGudzTGnYI8fB176nlmIS + O01vaI4fMYwO9Chg3mzVT2 + 4AkTBm1sXnDdzhNNnkclipMXdmAHnRtzU9kREFZU0 / yyOhorzqxWBi0LQxpjTAZawi + 8ysH7PGnNlX3FUObZcmHis0oD / C7ll6DwX4WVSjh3JGcaIhbhB + sovxW5duTDqyuyKpRsbyBD0 + wNjSuJFjh5MnXJqcqrEUaPRoe2wQ9k7q0K2KOXAmYYPUWrLY6N + jjYdnkyP9XWWkz6c7Qvx7m / dBfgpyJbPryWbSZ8PsvSgtDTIND / jNfwmgQjOCGgsZlmCsvRIixzh3uNmFCg75wyD6f / wdZ5gq1HPFdyLblHs46P9ClfMbWJt9APx7c1SRE + qMbdLf / 5 / vNGiGHr6bBXKRX70 + XODl04shFQpjm1kKkG9qHkp3bOSot4Da987dRHMhAbd0d3QdS8wCg7s6NPk4qDVnR6BCxiM2vbOD1B4gWQ8 = [электронная почта защищена] 

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

Отключить парольную аутентификацию

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

1. Откройте файл конфигурации SSH с помощью следующей команды.

 Судо нано / и т. Д. / SSH / sshd_config 

2. Установите для аутентификации по паролю значение нет , чтобы отключить пароли в виде открытого текста.

 Пароль Аутентификация № 

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

 PubkeyAuthentication да 

Затем сохраните и выйдите из редактора.

4. Перезапустите службу SSH , чтобы применить изменения, используя команду ниже.

 sudo systemctl перезапуск sshd 

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

Выводы

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

Обновлено: 25.09.2021 — 22:51

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

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