SSH в Linux

SSH в Linux Сертификаты
Содержание
  1. Что значит «протокол»?
  2. Что дальше
  3. Cisco nexus 9.3
  4. Fingerprint
  5. Huawei usg (6000)
  6. Known_hosts
  7. Mac os x
  8. Securecrt
  9. Ssh-copy-id
  10. Аутентификация на сервере с использованием ключей ssh
  11. Выполнить команду из скрипта на удалённом компьютере
  12. Генерирование rsa-пары в securecrt
  13. Генерирование публичных ключей на mac os x средствами операционной системы
  14. Демонстрация
  15. Для чего нужен ssh?
  16. Добавление комментариев в ключи ssh-keygen
  17. Дополнительные ссылки
  18. Загрузка публичного ключа на сервер
  19. Закрыть все ssh туннели
  20. Запустить ssh в фоновом режиме
  21. Изменение паролей в ssh-keygen
  22. Использование программы ssh-agent
  23. Использование секретного ключа для подключения по ssh
  24. Как встроить открытый ключ при создании сервера
  25. Как конвертировать .ppk ключ в openssh ключ
  26. Связанные статьи:
  27. Как поменять количество битов в ключах ssh-keygen
  28. Как работают ключи ssh?
  29. Как скопировать открытый ключ на ваш сервер
  30. Какой ключ куда?
  31. Конвертация сертификатов
  32. Копирование открытого ключа вручную
  33. Копирование открытого ключа с использованием ssh-copy-id
  34. Копирование открытого ключа с помощью ssh
  35. Настройка ssh сертификатов на сервере
  36. Настройка подключения putty с использованием ssh сертификата
  37. Отключение аутентификации с помощью пароля на сервере
  38. Передать ключ на удалённый хост
  39. Подготовка папок
  40. Подключение по ssh
  41. Подключение по ssh по паролю
  42. Показ публичного ключа из приватного
  43. Предварительная настройка сервера
  44. Применение публичного ключа на оборудовании
  45. Примеры шаблонов сертификатов
  46. Программа putty, клиент ssh под windows.
  47. Сгенерировать пару ключей
  48. Создание ключей ssh
  49. Создание публичного rsa-ключа
  50. Создать ssh туннель
  51. Список всех открытых ssh туннелей
  52. Список источников:
  53. Типы ключей
  54. Узнать версию openssh в linux
  55. Управление приватными ключами на клиенте ssh
  56. Управление публичными ключами на сервере ssh
  57. Утилита ssh-keygen
  58. Финальная настройка сервера
  59. Форвардинг (проброс) ключей
  60. Форвардинг ssh-agent
  61. Чем telnet отличается от ssh?

Что значит «протокол»?

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

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

Что дальше

Мы добавили в документацию

, где более подробно рассматриваются все параметры и переменные.

Если есть вопросы — не стесняйтесь задавать.

Cisco nexus 9.3

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

Fingerprint

При первом подключении появится сообщение:

Введите yes в первый раз.

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

Если fingerprint не меняется, то такое сообщение не будет появляться.

Huawei usg (6000)

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

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

Known_hosts

Список известных хостов находится в файле

known_hosts

Полный путь:

/home/$(whoami)/.ssh/known_hosts


Обычно файл

known_hosts

имеет следующий формат (записи идут через пробел)
(
подробнее
)

{server-id} алгоритм {public-key-string} {comment}

Примеры алгоритмов: ssh-rsa, ssh-dss, ssh-ed25519, ecdsa-sha2-nistp256 …


Пример строки:

|1|abcdef abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567

Таким образом

abcdef abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1=


Это хэш от имени сервера.

ssh-rsa

Это алгоритм шифрования

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567


Это публичный ключ хоста

Mac os x

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

Securecrt

В окне настроек SSH есть список Authentication. В нём необходимо увеличить приоритет PublicKey до самого высокого — сделать верхним в списке.

Затем перейдите в параметры PublicKey и выберите файл приватного ключа. Самый верхний переключатель позволяет использовать глобальные настройки секретного ключа или сеансовые настройки — другой секретный ключ (ключ не по умолчанию) — только для этого подключения.


Настраиваем глобальный публичный ключ: в меню Options → Global options → Категория SSH2.

Ssh-copy-id

Я предпочитаю использовать с флагом -i и задавать путь до нужного ключа

sudo ssh-copy-id -i ~/.ssh/andrei-key.pub andrei@192.168.0.2

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/home/andrei/.ssh/andrei-key.pub”
The authenticity of host ‘192.168.0.2 (192.168.0.2)’ can’t be established.
ECDSA key fingerprint is SHA256:abcdefgh1234567890abcdefgh1234567890abc def.


Введите yes

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
andrei@192.168.0.2’s password:

Введите пароль

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘andrei@192.168.0.2′”
and check to make sure that only the key(s) you wanted were added.


Теперь на хосте 192.168.0.2 в файле
/home/andrei/.ssh/authorized_keys
появилась новая запись вида

Аутентификация на сервере с использованием ключей ssh

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

Базовый процесс выглядит аналогично:

Выполнить команду из скрипта на удалённом компьютере


Если подключение по ssh происходим из

bash-скрипта

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

#!/bin/bashssh andrei@192.168.0.2 “ls;cd /home/andrei/bash_scripts;ls;ip a;cal”

Если нужно выполнить команду, требующую sudo попробуйте флаг -t

#!/bin/bashssh -t andrei@192.168.0.2 “sudo apt upgrade”

Генерирование rsa-пары в securecrt


SecureCRT → Tools → Create Public Key…:

Чуть-чуть теории → кнопка “Next >”:

Тип сертификата RSA/DSA → Выбираем RSA → кнопка “Next >”:

Генерирование публичных ключей на mac os x средствами операционной системы

Будем использовать встроенную утилиту ssh-keygen (man ssh-keygen).


Генерируем RSA-ключ с длиной 2048 бит с указанием имени ключа, путем к папке с местом хранения ключа:

Демонстрация

Туннель создан, не закрывайте терминал. Откройте два новых терминала или две новые вкладки в старом.

У вас два пустых терминала, оба на локальном хосте. Назовём их 1 и 2.

Из терминала 2 подключимся к удалённому хосту 192.168.0.2 по ssh и будем
слушать на порту 9200 с помощью nmap

ssh andrei@192.168.0.2
nmap -l 9200


На терминале 1 с помощью nmap отправим сообщение на порт 9119 локального хоста. Это тот порт,
который мы настроили на проброс.

nmap localhost 9119

Введём любой текст

Для чего нужен ssh?

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

Добавление комментариев в ключи ssh-keygen

Для работы с комментариями имеется две опции:

Дополнительные ссылки

  1. Основы SSH / Видео на канале Хекслета
  2. SSH Essentials: Working with SSH Servers, Clients, and Keys
  3. Памятка пользователям ssh

Загрузка публичного ключа на сервер

Нужно добавить публичный ключ на сервер в файл ~/.ssh/authorized_keys. Самый простой способ — запустить на локальной машине команду для копирования ключа:

Другой способ — подключиться по паролю, открыть в редакторе файл ~/.ssh/authorized_keys и добавить в конец текст из вашего файла ~/.ssh/id_rsa.pub.

Теперь при подключении пароль запрашиваться не будет1.

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

Закрыть все ssh туннели


Чтобы закрыть всё, что связано с ssh можно выполнить

sudo killall ssh sshd

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

Запустить ssh в фоновом режиме

Существует несколько способов запустить ssh соединение в фоновом режиме – то есть освободим текущий терминал.

-L, screen, tmux, nohup

Мне запустить ssh фоном из скрипта помог nohup, поэтому начнём с него

Изменение паролей в ssh-keygen

Для работы с паролями имеется несколько опций:

-P парольная фраза


Этой опцией можно передать пароль, чтобы программа его не спрашивала. При смене пароля, этой опцией передаётся старый пароль.

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

Про сертификаты:  Public Key Cryptography: осваиваем открытые ключи на практике — «Хакер»

-N новый_пароль

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


Файл ключей нужно указать опцией -f:

ssh-keygen -p [-f КЛЮЧ] [-N НОВЫЙ_ПАРОЛЬ] [-P СТАРЫЙ_ПАРОЛЬ]

Использование программы ssh-agent

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

OpenSSH

, существуют специальные программы

ssh-agentssh-add

, в общем-то вторая является дополнением первой.

Как это работает. Поле запуска программы

ssh-agent

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

ssh-agent

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

Запускать

ssh-agent

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

eval

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

ssh-agent -c
Если в качестве оболочки используется С – Shell
ssh-agent -s
Если в качестве оболочки используется Bourne Shell
eval `ssh-agent`
В таком варианте запущенный ssh-agent, будет передан команде eval, которая выполнит его в текущей оболочке. Обратите внимание, используются обратные кавычки а не обычные !

Итак, запускаем

ssh-agent

Использование секретного ключа для подключения по ssh

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

Мы рассмотрим настройку использования публичного ключа в самых популярных программах: SecureCRT и PuTTY.

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

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

Внизу страницы создания дроплета есть опция для добавления ключей SSH на ваш сервер:

Если вы уже добавили файл открытого ключа в учетную запись DigitalOcean, вы сможете выбрать данную опцию (в примере выше указаны два существующих ключа: “Work key” и “Home key”). Чтобы встроить существующий ключ, нажмите на него, чтобы его выделить.

Если в вашу учетную запись еще не выгружен открытый ключ SSH, или если вы хотите добавить новый ключ, нажмите кнопку “ Add SSH Key”. При этом будет открыто диалоговое окно:

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

cat ~/.ssh/id_rsa.pub

Как конвертировать .ppk ключ в openssh ключ

Ключ .ppk генерируется при экспорте ключей из PuTTY.

Пример файла .ppk:

Конвертация ключей из файла .ppk в формат OpenSSH в Linux

Для конвертации формата .ppk в формат OpenSSH можно использовать утилиту puttygen, которая включена в пакет Putty. Следовательно, нам нужно установить PuTTY

Linux: с вашим менеджером пакетов установите PuTTY (или более минимальный пакет PuTTY-tools):

Debian, Kali Linux, Linux Mint, Ubuntu и их производные:

sudo apt install putty-tools


Дистрибутивы на основе RPM:

yum install putty

Gentoo:

emerge putty

Arch Linux, BlackArch и их производные:

sudo pacman -S putty


OS X: Установите Homebrew, затем запустите

brew install putty

Поместите ваши ключи в какую-нибудь директорию, например, в домашнюю папку. Теперь конвертируем PPK ключи в SSH пару.

Для извлечения приватного ключа:

cd ~
puttygen id_dsa.ppk -O private-openssh -o id_dsa

и для извлечения публичного ключа:

puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub


Переместите эти ключи в ~/.ssh и убедитесь, что для приватного ключа ограничены права записи:

mkdir -p ~/.ssh
mv -i ~/id_dsa* ~/.ssh
chmod 600 ~/.ssh/id_dsa
chmod 666 ~/.ssh/id_dsa.pub

Конвертация ключей из файла .ppk в формат OpenSSH в Windows

Откройте PuTTYgen, нажмите кнопку «Load» и выберите файл .ppk с ключами.


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

Теперь в меню перейдите в «Conversions» → «Export OpenSSH key» и сохраните приватный ключ.

Скопируйте ваш приватный ключ в файл ~/.ssh/id_dsa (или id_rsa).

Связанные статьи:

Как поменять количество битов в ключах ssh-keygen


Для этого используется опция: -b БИТЫ

Она определяет количество бит в создаваемом ключе. Для ключей RSA минимальный размер составляет 1024 бита, а по умолчанию — 2048 бит. Как правило, 2048 бит считается достаточным. Ключи DSA должны иметь длину 1024 бита, как указано в FIPS 186-2. Для ключей ECDSA флаг -b определяет длину ключа, выбирая один из трёх размеров эллиптической кривой:

Как работают ключи ssh?

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

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

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

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

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

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

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

Как скопировать открытый ключ на ваш сервер

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

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

Какой ключ куда?

.pub

ключ отправляйте на удалённую машину

приватный ключ храните на своём клиенте

Конвертация сертификатов


Рассмотрим простой пример: вы достали из

базы данных

сертификат
MIIC4jCCAc … A7A6Rpt8V9Q==
, но он не отформатирован и не проходит валидацию

Сертификат, конечно, длиннее, я поставил троеточие для экономии места и вашего времени.

Выполните

Копирование открытого ключа вручную

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

Содержимое файла id_rsa.pub нужно будет каким-то образом добавить в файл ~/.ssh/authorized_keys на удаленном компьютере.

Чтобы вывести содержимое ключа id_rsa.pub, введите на локальном компьютере следующую команду:

cat ~/.ssh/id_rsa.pub

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

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44 tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q bqgZ8SeeM8wzytsY dVGcBxF6N4JS zVk5eMcV385gG3Y6ON3EG112n6d SMXY0OEBIcO6x PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77 xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66 PujOO xt/2FWYepz6ZlN70bRly57Q06J ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv Ow9gI0x8GvaQ== demo@test

Откройте удаленный хост, используя любой доступный метод. Например, если вы используете дроплет DigitalOcean Droplet как сервер, вы можете выполнить вход, используя веб-консоль на панели управления:

Когда вы получите доступ к учетной записи на удаленном сервере, вам нужно будет убедиться, что каталог ~/.ssh создан. При необходимости эта команда создаст каталог, а если каталог уже существует, команда ничего не сделает:

mkdir -p ~/.ssh

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

Про сертификаты:  КриптоПро | Атликс HSM - Использование

Копирование открытого ключа с использованием ssh-copy-id

Самый удобный способ скопировать открытый ключ на существующий сервер — использовать утилиту под названием ssh-copy-id. Поскольку этот метод очень простой, если он доступен, его рекомендуется использовать.

Инструмент ssh-copy-id входит в пакеты OpenSSH во многих дистрибутивах, так что, возможно, он уже установлен на вашей локальной системе. Чтобы этот метод сработал, вы должны уже настроить защищенный паролем доступ к серверу через SSH.

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

Синтаксис выглядит следующим образом:

Копирование открытого ключа с помощью ssh

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

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

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

Полная команда выглядит следующим образом:

Настройка ssh сертификатов на сервере

Выполним генерацию ключей SSH.

ssh-keygen -a 1000 -b 4096 -o -t rsa

Укажем путь хранения ключа и его имя

/root/.ssh/id_rsa

💡 В моем случае при создании сертификата для root оказалось важным указать жесткий путь /root/.ssh/, вместо относительного ~/.ssh/ чтобы избежать ошибки SSH Server refused our key.

Система так же создаст публичный ключ по данному пути.

Указываем ключевую фразу для доступа к приватному ключу.

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

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Перезапускаем SSH

sudo service ssh restart 

Настройка подключения putty с использованием ssh сертификата

Добавьте приватный сертификат в подключение:

Connection > SSH > Auth > Private key file for authentication

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

Успешный вход c SSH сертификатом на Ubuntu сервер
Успешный вход на сервер с SSH сертификатами

💡 Если при входе на сервер вы получаете сообщение SSH Server refused our key, проверьте правильность прав на папку .ssh и файл authorized_keys, а так же что вы входите под тем именем пользователя, в authorized_keys которого добавлен ваш ключ.

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

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

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

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

sudo nano /etc/ssh/sshd_config

Передать ключ на удалённый хост

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

.pub

ключ на удалённый хост.

Сделать это можно несколькими способами начнём с утилиты
ssh-copy-id

Подготовка папок

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

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

Выполните:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

Подключение по ssh

Подключение происходит с помощью команды
ssh + имя_пользователя + хост

Например

ssh andrei@192.168.0.2

Если вы подключаетесь к хосту впервые, появится предупреждение


The authenticity of host ‘192.168.56.101 (192.168.56.101)’ can’t be established.
ECDSA key fingerprint is SHA256:db8az/qbrWOJWvNRv2d9UHaDBnnUHanJ9Svca9vFx7c.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Если выбрать yes
то в файл

~/.ssh/known_hosts

добавится похожая строка:

|1|abcdef abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567


Обычно файл

known_hosts

имеет следующий формат (записи идут через пробел)

{server-id} ssh-rsa {public-key-string} {comment}

Таким образом

abcdef abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1=


Это хэш от имени сервера.

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

Подключение по ssh по паролю

Простейший вариант — подключение по паролю. После ввода команды ssh система запросит пароль:

Пароль придется вводить каждый раз.

Показ публичного ключа из приватного

Опция -y прочитает файл OpenSSH формата с приватным ключом и напечатает в стандартный вывод публичный ключ OpenSSH.

Также с помощью опции -f нужно указать путь до приватного ключа, из которого будет извлечён соответствующий ему публичный ключ:

ssh-keygen -y -f ПРИВАТНЫЙ-КЛЮЧ

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

ssh-keygen -y -f id_rsa


Вы можете столкнуться с ошибкой:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "id_rsa": bad permissions

Она означает, что приватный ключ доступен для чтения кому угодно и программа ssh-keygen отказывается работать с ним по этой причине. Чтобы исправить эту ошибку, просто установите на файл с приватным ключом права доступа 600:

chmod 600 id_rsa

Предварительная настройка сервера

Разрешим вход с использованием публичного сертификата SHH на сервер и укажем путь до сертификата в настройках SSH, файл sshd_config.

nano /etc/ssh/sshd_config

Раскомментируйте или добавьте значения:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Применение публичного ключа на оборудовании

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

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

Примеры шаблонов сертификатов

Внесём несколько изменений в дефолтный шаблон.

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

Программа putty, клиент ssh под windows.

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

PuTTy

. В него входят следующие утилиты:

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

Сгенерировать пару ключей


Первый шаг – это генерация пары ключей. Обычно это делается на клиентской машине.
Например, на вашем ноутбуке.

Основная команда ssh-keygen создаст 2048-битную пару RSA ключей. Для
большей надёжности можно добавить флаг -b 4096

Выполните

ssh-keygen -b 4096


Чтобы сгенерировать ключ в /home/$(whoami)/.ssh

или

sudo ssh-keygen -b 4096


Чтобы сгенерировать ключ в /home/root/.ssh

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

Нужно придумать имя ключа.

Я назову ключ

andrei-key101

а сохранять буду в текущую директорию.

Enter file in which to save the key (/root/.ssh/id_rsa): andrei-key101
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Нужно два раза ввести пароль. Если он вам нужен. Обычно нет.

Your identification has been saved in andrei-key101
Your public key has been saved in andrei-key101.pub
The key fingerprint is:
SHA256:abcd/abcdefghijklmnopqrstuvwxyz1234567890ab root@urn-su
The key’s randomart image is:
—[RSA 4096]—-
|=o oo |
|= oo o. = o |
| |
|Oo=o . . |
|B .o S . |
| o.o |
| .0. . |
|o = . E |
| =oo. . . |
—-[SHA256]—–

Ключи готовы. Я сохранил их в текущую директорию поэтому увижу их сделав ls

Про сертификаты:  Фосфин, ТАБ, Г (инсектициды и акарициды, пестициды) — AgroXXI

andrei-key101 andrei-key101.pub

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

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

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

Для этого мы можем использовать специальную утилиту ssh-keygen, которая входит в стандартный набор инструментов OpenSSH. По умолчанию она создает пару 2048-битных ключей RSA, что подходит для большинства сценариев использования.

Сгенерируйте на локальном компьютере пару ключей SSH, введя следующую команду:

ssh-keygen

Создание публичного rsa-ключа

Пару RSA-ключей можно создать с помощью различных утилит: SecureCRT, PuTTYgen или любым другим ПО. При создании ключа можно задать Passphrase (защита ключа с помощью пароля).

Создать ssh туннель


Туннели обычно создают для перенаправления траффика. SSH tunnel это то же самое что и SSH port forwarding.

Допустим вы хотите направить траффик со своего localhost (127.0.0.1) на
удалённый
хост 192.168.0.2.

На

удалённом

хосте у вас есть пользователь с именем andrei и вы знаете его пароль.

Сперва нужно определиться с портами на локальном хосте и на удалённом.

Предположим, вы выбрали 9119 для локального и
9200 для

удаленного
хостов.

То есть вы хотите, чтобы всё, что идёт на localhost:9119 было перенаправлено на
192.168.0.2:9200

Выполните

ssh -L 9119:192.168.0.2:9200 andrei@192.168.0.2


The authenticity of host ‘192.168.0.2 (192.168.0.2)’ can’t be established.
ECDA …

andrei@192.168.0.2’s password:
Last login: Sun Jan 31 13:23:00 2021

Проверьте ip выполнив

ip a

Если вам нужен туннель с поддержкой графического интерфейса

X Window System

используйте флаг -X

ssh -X -L 9119:192.168.0.2:9200 andrei@192.168.0.2

Список всех открытых ssh туннелей


Чтобы получить список туннелей открытых именно ssh выполните

sudo lsof -i -n | egrep ‘<ssh>’

ssh 14695 andrei 3u IPv4 230080 0t0 TCP 192.168.0.1:46356->192.168.0.2:ssh (ESTABLISHED)
ssh 14695 andrei 4u IPv6 230103 0t0 TCP [::1]:9119 (LISTEN)
ssh 14695 andrei 5u IPv4 230104 0t0 TCP 127.0.0.1:9119 (LISTEN)

Вывод этой команды при практически идентичных условиях почему-то разный.

Ниже пример второго варианта. Если вы знаете почему так получается – напишите в комментариях.

ssh 15151 andrei 3u IPv4 239364 0t0 TCP 192.168.0.1:46464->192.168.0.2:ssh (ESTABLISHED)
ssh 15151 andrei 4u IPv6 239380 0t0 TCP [::1]:mxit (LISTEN)
ssh 15151 andrei 5u IPv4 239381 0t0 TCP 127.0.0.1:mxit (LISTEN)
ssh 15151 andrei 9u IPv6 239428 0t0 TCP [::1]:mxit->[::1]:54306 (ESTABLISHED)

Список источников:

  1. Википедия RSA
  2. Conversion from Putty to SecureCRT with auth. keys, SecureCRT Forum
  3. Secure Shell Configuration Guide, Cisco IOS Release 15E
  4. Скачивание PuTTYgen
  5. Huawei, официальная документация — описание различных форматов ключей для импортирования на маршрутизатор Huawei
  6. Huawei USG 6000, настройка аутентификации по публичным ключам (CLI: Example for Logging In to the CLI Using STelnet (RSA Authentication))
  7. Nexus 9000 Configuration guide SSH public key
  8. man ssh-keygen — всё про генерацию ключей на mac os x.
  9. SSH config file на MAC OS X
  10. Как указывать другой публичный ключ в параметрах SSH
  11. Как указывать сторонний публичный ключ в параметрах SSH config
  12. Как преобразовать openssh public key в формат RFC4716

Типы ключей

Программа ssh-keygen можен генерировать четыре типа ключей:

Чтобы выбрать любой из этих типов, используется опция -t. В предыдущем примере мы выбрали rsa — явно указывать тип RSA необязательно, поскольку он подразумевается по умолчанию (то есть генерацию ключей можно запустить вообще без опции -t).

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

  • ~/.ssh/id_dsa
  • ~/.ssh/id_ecdsa
  • ~/.ssh/id_ed25519
  • ~/.ssh/id_rsa

Эти файлы нужно держать в секрете, они должны быть доступны только для владельца.


Соответствующие публичные ключи будут иметь такое же название, но с дополнительным расширением .pub:

  • ~/.ssh/id_dsa.pub
  • ~/.ssh/id_ecdsa.pub
  • ~/.ssh/id_ed25519.pub
  • ~/.ssh/id_rsa.pub

Эти файлы не являются секретными, их содержимое нужно скопировать в файл ~/.ssh/authorized_keys на компьютер с сервером SSH.

Узнать версию openssh в linux

Чтобы узнать версию OpenSSH в вашем дистрибутиве Linux выполните

ssh -V


OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2021

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

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

В конфигурационном файле клиента SSH для указания пути до приватных ключей используется директива IdentityFile. Её значения по умолчанию:

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_ecdsa
IdentityFile ~/.ssh/id_ed25519

Как можно увидеть, разрешено использовать тильду для указания на домашнюю папку пользователя.

Можно иметь несколько директив IdentityFile в конфигурационных файлах; все эти идентификаторы будут опробованы по очереди. Множественные директивы IdentityFile добавят кандидатов в очередь для попыток (это поведение отличается от других конфигурационных директив).


Также можно настроить использование определённых идентификационных файлов для определённых хостов:

Host 192.168.0.1
	IdentityFile ~/.ssh/id_rsa_router

Host 185.117.153.79
	IdentityFile ~/.ssh/id_rsa_suip

Host *
	IdentityFile ~/.ssh/id_rsa
	IdentityFile ~/.ssh/id_dsa
	IdentityFile ~/.ssh/id_ecdsa
	IdentityFile ~/.ssh/id_ed25519

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

-i identity_file

Управление публичными ключами на сервере ssh

Публичные ключи всех видов размещены в одном файле, значение по умолчанию:

AuthorizedKeysFile .ssh/authorized_keys

По умолчанию проверяются файлы:

  • ~/.ssh/authorized_keys
  • ~/.ssh/authorized_keys2

Утилита ssh-keygen


Мы применили ssh-keygen для генерации ключей. Кроме этого она предназначена для управления и конвертации ключей аутентификации для ssh.

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

man ssh-keygen

Финальная настройка сервера

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

nano /etc/ssh/sshd_config

Раскомментируйте или добавьте значениe:

PasswordAuthentication no

После чего перезапустите службу SSH.

sudo service ssh restart

Настройка авторизации по сертификату SSH — завершена!

Форвардинг (проброс) ключей

Если вы подключились к удаленному серверу X, и с него хотите подключиться к другому серверу Y, например, чтобы сделать git pull с GitHub’а, то придется держать копию ваших ключей на сервере X.

Утилита ssh с флагом -A позволяет «пробросить» ключи с подключаемой машины в удаленную:

Ключи, добавленные к агенту аутентификации (ssh-agent) станут доступными на удаленном сервере. При этом файлы-ключи физически не будут находиться на сервере.

Форвардинг ssh-agent

Форвардинг агента включается в файле конфигурации клиента

SSH

, директивой

ForwardAgent yes

. Как это работает. Вы запускаете

ssh-agent

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

SSH

серверу, сервер создает обратное перенаправление через созданный

SSH

туннель к вашему

ssh-agent

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

Local_host

, подключаемся к удаленной машине

Remote_host

, по каким-то причинам, нам понадобилось что-то посмотреть на еще одном хосте,

Next_remote_host

, что происходит в таком случае:

  • Клиент ssh c Local_host, подключается к SSH серверу, Remote_host, и запрашивает форвардинг для ssh-agent
  • Сервер SSH, /usr/sbin/sshd, хоста Remote_host, создает сокет в /tmp/ssh-XXXXXXX/agent.##### и устанавливает переменную окружения SSH_AUTH_SOCK, присваивая ей путь к сокету.
  • Когда нам понадобится подключиться к следующему серверу, ( мы сейчас на сервере Remote_host ), SSH клиент хоста Remote_host, обращается по пути, лежащему в переменной SSH_AUTH_SOCK, то есть к сокету.
  • SSH сервер, находящийся на другом конце сокета /tmp/ssh-XXXXXXX/agent.#####, передает данные из ssh, сервера Remote_host, на ssh-agent, запущенный на хосте Local_host. Вся работа с ключами происходит на машине Local_host а не на машинах, на которых вы регистрируетесь в процессе работы.
  • Теперь с хоста Remote_host, вы можете подключиться к хосту Next_remote_host, используя ключи, загруженные в ssh-agent, на хосте Local_host.

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

/etc/ssh/ssh_config

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

Чем telnet отличается от ssh?

Telnet это конкретная программа с графическим интерфейсом, с помощью которой можно соединяться по SSH. Обычно ей пользуются только Windows пользователи, в Linux и MacOS используют консольную утилиту ssh.

Оцените статью
Мой сертификат
Добавить комментарий