Linux, MacOS, Windows 10
Создание SSH-ключей
Запустите терминал или Windows PowerShell на вашем компьютере и выполните команду:
ssh-keygen
Вы увидите примерно следующее сообщение:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Нажмите Enter — ключ будет сохранен в указанную директорию по умолчанию.
Далее вам будет предложено задать пароль (кодовую фразу) для ключа. Вы можете задать ее или оставить пустой, просто нажав Enter
Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу.
Процедура создания ключей завершена, ключи сохранены в директории ~/.ssh/ в файлах id_rsa и id_rsa.pub. Теперь их необходимо скопировать на сервер.
Копирование ключей на сервер
-
Выполните в терминале следующую команду, указав вместо user имя пользователя, созданного на сервере, а вместо server — IP-адрес вашего сервера:
ssh-copy-id user@server #Например: ssh-copy-id [email protected]
-
В результате содержимое файла с публичным ключом id_rsa.pub будет скопировано в файл ~/.ssh/authorized_keys на сервере, и в дальнейшем вы сможете устанавливать соединение с сервером, используя команду:
ssh user@server #Например: ssh [email protected]
Настройки брандмауэра для SSH подключения
UFW — это популярный удобный брандмауэр iptables. Брандмауэр UFW не устанавливается по умолчанию в системе Debian.
Чтобы установить ufw в Debian, введите команду:
По умолчанию UFW настроен так, чтобы запрещать все входящие соединения и разрешать все исходящие соединения. Прежде чем включать UFW, включите ssh, иначе он будет запрещать входящие соединения.
По умолчанию служба SSH использует порт 22. Для повышения безопасности можно изменить порт по умолчанию или настроить перенаправление портов.
Чтобы разрешить порт 22 с помощью ufw, введите:
Чтобы включить UFW, введите:
Брандмауэр теперь активен, с разрешающим правилом подключения по SSH.
Перенаправление порта
SSH-туннелирование или перенаправление портов SSH — это метод создания зашифрованного SSH-соединения между клиентом и сервером, через которое могут ретранслироваться порты служб.
Перенаправление SSH полезно для передачи сетевых данных служб, использующих незашифрованный протокол, например VNC или FTP, доступа к контенту с географическим ограничением или обхода промежуточных межсетевых экранов. По сути, вы можете перенаправить любой TCP-порт и туннелировать трафик через безопасное соединение SSH.
Существует три типа переадресации портов SSH:
Перенаправление локального порта
Перенаправление локального порта позволяет вам перенаправить соединение с клиентского хоста на хост-сервер SSH, а затем на порт хоста назначения.
Чтобы создать переадресацию локального порта, передайте параметр клиенту :
Параметр -f указывает команде работать в фоновом режиме, а не выполнять удаленную команду.
Перенаправление удаленного порта
Перенаправление удаленного порта противоположно перенаправлению локального порта. Он перенаправляет порт с хоста сервера на хост клиента, а затем на порт хоста назначения.
Параметр указывает создать переадресацию удаленного порта:
Динамическая переадресация портов
Динамическая переадресация портов создает прокси-сервер SOCKS, который обеспечивает связь через диапазон портов.
Чтобы создать динамическую переадресацию портов (SOCKS), передайте параметр клиенту ssh:
Более подробную информацию и пошаговую инструкцию смотрите в статье Как настроить SSH-туннелирование (перенаправление портов) .
Настройка Брандмауэра (netfilter) для SSH и тырем порт
По умолчанию для SSH соединения, используется порт ТСP-порт 22. Забегая перед следует сказать, что многие рекомендует его поменять, но я так не думаю. Смена порта не поможет, «любой» сканер без труда отыщет ваш порт куда вы его не запрятали. Способ смены порта хорошо известен и Хакеры пишут соответствующие скрипты. Ниже будут приведены меры безопасности, прочитав их вы можете решить стоит ли менять порт или нет. Чтобы узнать какой порт слушает демон (sshd) на сервере, нужно выполнить команду:
$ sudo grep -w 'Port' /etc/ssh/sshd_config #Port 22
Применив директиву Port поменяв значение, вы укажете демону (sshd) порт который нужно слушать;
Port 8822
Теперь демон (sshd) будет слушать порт 8822, для подключения к серверу, нужно воспользоваться на клиентской машине командой:
$ ssh -p8822 [email protected]
Ключ ‘-p‘ указывает порт, вместо user пишем имя пользователя, 127.0.0.1 меняем на IP своего сервера.
C портами разобрались, теперь нужно настроить брандмауэр. Можно воспользоваться средствами TUI дистрибутива.
Внимание! Будьте внимательны и последовательны в ваших действиях ! Неправильные действия могут привести к потере удалённого доступа. Для Red-Hat based:
Для Red-Hat based:
$ sudo yum install iptables system-config-securitylevel-tui $ sudo system-config-securitylevel-tui
Нужно открыть порты (SSH) ТСP-22, UDP-22 или соответственно открыть порт который указали в директиве
Для SuSE:
$ sudo yast
Заходим в /Безопасность и пользователи/ Брандмауэр / Разрешённые службы — добавляем «Сервер Secure Shell», если вы указали порт директивой то / Брандмауэр / Разрешенные службы /Дополнительно и добавляем порт .
Для «ручной настройки» следует внимательно ознакомиться с правилами и настройкой брандмауэра вашего дистрибутива.
Приведу пример открытия портов простыми правилами:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p udp --sport 22 -j ACCEPT
Внимание ! Следует понимать, что к примеру SuSEfirewall2 генерирует правила для iptables из конфигурационного файла /etc/sysconfig/SuSEfirewall2, в каждом дистрибутиве есть свои особенности управления брандмауэром
Файл конфигурации SSH
Если вы подключаетесь к нескольким удаленным системам через SSH на ежедневной основе, вы обнаружите, что запоминание всех удаленных IP-адресов, различных имен пользователей, нестандартных портов и различных параметров командной строки является трудным, если не невозможным.
Клиент OpenSSH считывает параметры, заданные в файле конфигурации для каждого пользователя ( ). В этом файле вы можете хранить различные параметры SSH для каждой удаленной машины, к которой вы подключаетесь.
Пример конфигурации SSH показан ниже:
Когда вы вызываете ssh-клиент, набирая , команда считывает файл и использует данные соединения, указанные для хоста dev. В этом примере эквивалентен следующему:
Дополнительные сведения см. В статье о файле конфигурации SSH .
Изменение порта SSH по умолчанию
Обычно файл конфигурации ssh находится по адресу /etc/ssh/sshd_config. Для редактирования файла вам понадобится редактор на основе терминала, такой как Vim, Nano или Emacs.
В таких дистрибутивах, как Ubuntu, по умолчанию установлен Nano, поэтому вы можете использовать его для открытия файла в режиме редактирования, например так:
sudo nano /etc/ssh/sshd_config
Как видите, для редактирования конфигурации ssh вы должны быть пользователем sudo или пользователем root.
Прокрутите немного вниз, и вы увидите строку с Port 22. Если это начинается с #, это означает, что строка закомментирована. Закомментированные строки дают вам настройки по умолчанию.
Так что, если вы видите # Port 22, это означает, что порт по умолчанию – 22.
Измените эту строку с номером порта по вашему выбору. В Linux номер порта 0-1023 обычно зарезервирован для различных служб. Хорошо избегать использования значений от 0 до 1023, чтобы избежать конфликтов.
Вы можете использовать любой другой номер порта от 1024 до 65535. Мы используем 1132 в примере. Убедитесь, что вы удалили символ # перед портом.
Сохраните изменения и выйдите из редактора. Если вы используете Nano, используйте Ctrl + X для сохранения и выхода.
Следующим шагом является перезапуск службы ssh. Большинство современных систем используют службы systemd, поэтому вы можете использовать следующую команду:
sudo systemctl restart sshd
Теперь, если вы хотите получить доступ к SSH-серверу, вам нужно будет указать номер порта:
ssh user@ip_address_of_server -p 1132
Было ли это полезно?
Мы надеемся, что вы найдете эту статью полезной для изменения порта SSH. Теперь, когда вы изменили порт, вам придется использовать его все время, когда вы хотите подключиться к серверу через SSH, и это может раздражать.
Вот почему мы рекомендуем использовать конфигурационный файл SSH, чтобы сохранить настройки для легкого и быстрого доступа.
Настройка аутентификации по ключу из Windows
Запускаем утилиту PUTTYGEN и нажимаем кнопку “Generate”. Для выполнения генерации необходимо произвольно перемещать указатель мышки по рабочему столу.
После того, как ключи сгенерированы, нажимаем кнопку “Save private key” и сохраняем файл с приватным ключом на диск. Место хранения закрытого ключа может быть произвольным, в дальнейшем в параметрях Putty потребуется указать путь к этому файлу. Далее выделяем и копируем в буфер обмена публичный ключ, отображаемый в верхней части окна.
Передачу публичного ключа на сервер выполним обычным копированием через окно терминала. Открываем Putty и подключаемся к серверу обычным способом.
Создадим в домашнем каталоге файл “.ssh/authorized_keys” и ограничим права других пользователей, так, чтобы доступ к этому файлу имел только владелец.
После создания файла запишем в него публичный ключ клиента. На предыдущем шаге публичный ключ был скопирован в буфер обмена. Для записи содержимого буфера обмена в файл воспользуемся командой cat и перенаправлением вывода.
После ввода команды щелкнем правой кнопкой мыши по окну терминала для вставки содержимого буфера обмена. Для завершения ввода нажимаем комбинацию клавиш “Ctrl+D” и отключаемся от сервера.
Далее укажем в параметрах Putty место хранения приватного ключа и снова выполним подключение к серверу.
Теперь для подключения к серверу достаточно ввести только имя пользователя. Если же вы попытаетесь подключиться с другой машины, на которой отсутствует приватный ключ, сервер снова запросит ввод пароля. После того, как аутентификация по ключу настроена, в целях безопасности вы можете изменить конфигурацию сервера и запретить вход по паролю.
Проверка используемого алгоритма защитного преобразования
Проверку используемого при подключении алгоритма защитного преобразования можно производить как на стороне клиента, так и на стороне сервера.В обоих случаях для этого нужно включить вывод отладочной информации.
На стороне сервера: в файле конфигурации сервера /etc/ssh/sshd_config раскомментировать строчки SyslogFacility и LogLevel, заменить уровень отладки INFO на DEBUG
После внесения изменений перезапустить сервер:
systemctl restart ssh
Отладочная информация сервера ssh выводится в файл /var/log/auth.log, и отслеживать сообщения о методах защитного преобразования, используемых при подключении клиентов, можно командой:
tail -f | grep cipher /var/log/auth.log
На стороне клиента:При выполнении подключения использовать опцию -v для вывода отладочной информации:
ssh -v ServerSSH
И в первом, и во втором случае используемый для подключения метод защитного преобразования будет отображен в виде строчек такого вида:
Подключение по SSH из Linux
Обычно в дистрибутивах Linux клиент OpenSSH установлен по умолчанию и не требует предварительной настройки. Подключение выполняется из окна терминала с помощью команды ssh. В качестве аргументов указываем имя пользователя и IP-адрес удаленного сервера. На нашем тестовом сервере, который мы используем в данном примере, существует только одна учетная запись mihail, именно её и будем использовать для подключения.
При первом подключении необходимо подтвердить добавление публичного ключа сервера в локальную базу, отвечаем “yes”, после чего вводим пароль пользователя, от имени которого выполняется подключение. Если соединение прошло успешно, вы увидите, приглашение командной строки сервера. Теперь все вводимые команды будут выполняться непосредственно на удаленной машине.
Прочее
Это бонус для развлечения. Шутка от разработчиков Linux, не несущая пользы.
cowsay — заставляет цифровую корову повторить текст, который вы ей передали. Как echo, только от лица коровы.
fortune | cowsay — награждает корову философским интеллектом и дает ей возможность делиться с вами умными цитатами.
cowsay -l — демонстрирует всех животных, которые могут с вами пообщаться в том случае, если вам почему-то не приглянулась корова.
sudo название менеджера пакетов install fortunes fortune-mod fortunes-min fortunes-ru — учит животных говорить на русском.
Здесь, пожалуй, и остановимся. Ключевые SSH-команды сервера мы рассмотрели. Их хватит для навигации и выполнения базовых операций. Остальное уже на ваших плечах и полностью зависит от проекта, над которым вы работаете.
Использование ключа
Ввод пароля для подключения через SSH — раздражающая процедура. У меня почти никогда не получалось ввести его правильно с первого раза. Поэтому я начал искать информацию о том, как подключиться к серверу через SSH без пароля. Простое и безопасное решение — использование ключа. Почему это безопаснее? Потому что пароль можно подобрать. Чтобы исключить такую вероятность, многие пользователи выбирают авторизацию с помощью ключа.
Суть процедуры в формировании двух ключей: публичного и приватного. Первый копируется на сервер, а второй остается на компьютере пользователя и не передается по сети. В таком случае пароль при подключении не требуется. Когда вы подключаетесь к серверу через SSH, публичный ключ взаимодействует с приватным и открывает доступ к удаленному управлению.
Генерирование ключа и подключение на Windows
Для удобства используем программу PuTTy. Вместе с ней устанавливается утилита PuTTYgen — в ней можно сгенерировать публичный и приватный ключи.
- Запустите программу PuTTYgen.
- Нажмите на кнопку Gengerate.
- Водите курсором мышки по рабочему столу, чтобы сгенерировать случайные значения ключей.
- Нажмите на кнопку Save private key, чтобы сохранить на жестком диске приватный ключ. Место хранения может быть любым — его нужно указать в параметрах PuTTY. Сделаем это позже.
- Скопируйте публичный ключ в буфер обмена (Ctrl + C) и закройте генератор ключей.
Теперь нужно перенести публичный ключ на сервер. Запустите программу PuTTY и подключитесь к серверу с помощью пароля. Затем последовательно введите следующие команды:
mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys
Эти команды создают на сервере папку и файл для хранения ключей, а также ограничивают к ним доступ — получить его может только владелец.
Следующий шаг — вставка публичного ключа из буфера обмена в файл authorized_keys. Для этого используется команда cat > .ssh/authorized_keys. После ввода команды щелкните по окну терминала правой кнопкой, чтобы вставить скопированный ранее публичный ключ. Для завершения ввода нажмите на сочетание клавиш Ctrl+D.
Вернитесь в настройки PuTTY. Перейдите в раздел Connection — SSH — Auth. Нажмите на кнопку Browse и укажите путь к приватному ключу, который вы ранее сохранили на жестком диске.
Теперь для подключения к серверу через SSH пароль не нужен — достаточно указать логин и IP-адрес сервера.
Генерирование ключа и подключение на Linux и macOS
Теперь посмотрим, как подключиться через SSH ключи на Linux и macOS.
- Запустите терминал на локальном компьютере.
- Выполните команду ssh-keygen, чтобы сгенерировать ключи.
- Нажмите на Enter, чтобы сохранить ключи.
Генератор предложит также задать кодовую фразу для ключа. Это дополнительная мера безопасности: если кто-то получит доступ к вашей локальной машине, то все равно не сможет подключиться к серверу через SSH. Минус один — вам тоже придется постоянно вводить ключевую фразу. Можно отказаться от этой меры защиты, просто нажав на клавишу Enter.
На этом процедура создания ключей завершена. Файлы d_rsa (приватный ключ) и id_rsa.pub (публичный ключ) хранятся в папке ~/.ssh/. Осталось скопировать открытую часть ключа на сервер.
- Вернитесь в терминал.
- Выполните команду ssh-copy-id [email protected], где root — логин для подключения к серверу по SSH, а 185.104.114.90 — IP-адрес или хост сервера.
После выполнения этой команды публичный ключ будет скопирован на сервер. Теперь вы можете подключаться к удаленной машине с помощью логина и IP-адреса — например, ssh [email protected]. Ключи будут сопоставляться автоматически.
Отключение запроса пароля
Суть приватных ключей в том, что они хранятся на локальных компьютерах. Если вы попытаетесь подключиться к серверу с другой машины, на которой нет ключа, то снова увидите запрос на ввод пароля. Чтобы авторизоваться можно было только по ключу, запретите использование пароля.
- Подключитесь к удаленному серверу.
- Выполните команду sudo nano /etc/ssh/sshd_config. Файл sshd_config откроется во встроенном текстовом редакторе.
- Найдите строку PasswordAuthentication yes и измените ее на PasswordAuthentication no.
- Сохраните изменения и перезапустите службу SSH командой sudo service ssh restart.
Авторизация по паролю отключена. Теперь подключиться к серверу можно только с помощью пары ключей.
Конвертация сертификатов
Рассмотрим простой пример: вы достали из
базы данных
сертификат
MIIC4jCCAc … A7A6Rpt8V9Q==
, но он не отформатирован и не проходит валидацию
Сертификат, конечно, длиннее, я поставил троеточие для экономии места и вашего времени.
Выполните
echo ‘MIIC4jC … 7A6Rpt8V9Q==’ | base64 -d | openssl x509 -inform der
Либо, если вам нужно работать с файлами — сохраните исходный сертифика в фай
raw_cert
echo MIIC4jC … 7A6Rpt8V9Q== > raw_cert
cat raw_cert | base64 -d | openssl x509 -inform der > cert
cat cert
——BEGIN CERTIFICATE——
MIIC4jC … 7A6Rpt8V9Q==
——END CERTIFICATE——
Такого же результата можно было добиться аккуратно добавив ——BEGIN CERTIFICATE—— в начало
и ——END CERTIFICATE—— в конец файла, но не всегда всё так просто.