Порт ssh

Введение

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

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

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

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

Пример. ssh-keygen. Ключи для Azure

Создание ssh ключей для виртуальной Linux в Microsoft Azure. Для создания и использования ключей SSH с Azure выполните описанные ниже действия.

cd .ssh
ssh-keygen -t rsa -b 2048 -N "" -C 'your-email@example' -f azuressh -q

Будут созданы два ключа azuressh и публичный azuressh.pub. Чтобы без ошибок скопировать содержимое azuressh.pub и вставить его в поле при создании VE, используйте ssh-keygen. Весь вывод, без исключений нужно копировать.

ssh-keygen -e -f azuressh.pub
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA
...
---- END SSH2 PUBLIC KEY ----

Не забудьте настроить файл config, для большего удобства.

Дополнительная документация SSH

  • Seahorse — GUI утилита для генерации и хранения SSH ключей. Оболочка для GPG.
  • Host-based аутентификация в OpenSSH

  • Bog BOS: SSH и OpenSSH: принципы работы, установка и настройка

  • Русские man: Команды и прикладные программы пользовательского уровня )

  • Генерация и преобразование ключей

  • Getting started with SSH

  • Руководство FreeBSD. ssh-agent и ssh-add. Туннелирование SSH

  • Защита с помощью SSH ключей

  • Как сгенерировать открытый/закрытый SSH-ключ в Linux

Формат файла ssh_known_hosts

В файлах /etc/ssh/ssh_known_hosts и ~/.ssh/known_hosts хранятся открытые ключи всех машин, с которыми когда-либо устанавливалась связь. Глобальный файл должен быть подготовлен администратором (это необязательно), пользовательский файл поддерживается автоматически: каждый раз, когда поступает запрос на соединение от неизвестной машины, её ключ автоматически заносится в пользовательский файл.

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

Имена хостов — это разделённый запятыми список шаблонов (символы подстановки — «*» и «?»); каждый шаблон сопоставляется с каноническим именем машины (при аутентификации клиента) или с именем, которое указано пользователем (при аутентификации сервера). Этот шаблон может также быть предварён знаком «!» для обозначения отрицания: если имя машины соответствует отрицаемому шаблону, оно будет отвергнуто (этой строкой) даже если оно соответствует другому шаблону в этой же строке. Также можно, заключив имя хоста или IP-адрес в квадратные скобки «» и «», через «» указать нестандартный порт.

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

Разрядность, порядок и модуль копируются из ключа хоста RSA, например, /etc/ssh/ssh_host_key.pub. Необязательное поле комментария занимает всю оставшуюся часть строки и игнорируется.

Комментариями также считаются пустые и строки начинающиеся с «#».

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

Примечание! Заметьте, что строки в этих файлах, обычно имеют длину в несколько сотен символов и, очевидно, не стоит вводить имена хостов вручную. Вместо этого их можно сгенерировать при помощи сценария оболочки или взять из файла /etc/ssh/ssh_host_key.pub, добавив в начале имя хоста.

Пример файла ssh_known_hosts:

# допустимы явные комментарии только на всю строку
closenet       192.0.2.53 1024 37 159...93 closenet.example.net
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234 =
# хэш имени хоста
|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa
AAAA1234 =

Подключение по SSH к хосту в VPN

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

Предположим, я хочу подключиться по SSH к компьютеру, который находится в VPN к которой я также подключён. В этом случае я могу подключиться указав IP интересующего меня компьютера в VPN сети, например:

ssh root@10.8.0.1

Некоторую дополнительную информацию смотрите .

Командная строка

Если вы под­клю­чи­тесь к дру­го­му ком­пью­те­ру по SSH, вы не уви­ди­те там рабо­чий стол и окна про­грамм. Вы уви­ди­те чёр­ный экран и стро­ки тек­ста. Это нор­маль­но. Это назы­ва­ет­ся команд­ной стро­кой. Сей­час вы поймёте.

Когда вы рабо­та­е­те за ком­пью­те­ром, вы обыч­но види­те окна, кноп­ки, стра­ни­цы и всё подоб­ное. Это назы­ва­ет­ся гра­фи­че­ским интерфейсом.

Гра­фи­че­ский интер­фейс — это не сами про­грам­мы. Это лишь спо­соб пред­став­ле­ния про­грам­мы. Сама про­грам­ма — это то, что испол­ня­ет­ся внут­ри ком­пью­те­ра: то, что счи­та­ет, копи­ру­ет, обра­ба­ты­ва­ет и так далее. Есть огром­ное коли­че­ство про­грамм без гра­фи­че­ско­го интер­фей­са: напри­мер, веб-сервер Apache — это про­грам­ма. Сер­вер рабо­та­ет на вашем ком­пью­те­ре, зани­ма­ет память, выда­ёт стра­ни­цы куда нуж­но, ведёт свою сер­вер­ную рабо­ту, но у него нет гра­фи­че­ско­го интер­фей­са — нет ника­ко­го окош­ка, на кото­рое вы може­те ска­зать «Это сервер».

Или, напри­мер, ваш бра­у­зер. Если у вас Chrome, то вы види­те окно с веб-страницей. А есть вер­сия Headless Chrome, кото­рая может выплё­вы­вать любые стра­ни­цы в виде кар­ти­нок пря­мо на ваш жёст­кий диск. У это­го «Хро­ма» нет гра­фи­че­ско­го интер­фей­са со стра­ни­цей (но есть неболь­шой интер­фейс для настройки).

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

Команд­ная стро­ка — это тек­сто­вый интер­фейс про­грам­мы. Вы вво­ди­те в эту стро­ку коман­ду, про­грам­ма может в ответ что-то вас спро­сить тек­стом, вы ей тек­стом отве­ти­те, и про­грам­ма сде­ла­ет свою рабо­ту. Мы уже стал­ки­ва­лись с команд­ной стро­кой, когда соби­ра­ли своё при­ло­же­ние в элек­троне или объ­яс­ня­ли, как устро­ен интер­нет:

Здесь в команд­ной стро­ке поль­зо­ва­тель maximilyakhov на ком­пью­те­ре iMac-Maxim выпол­нил коман­ду ping для адре­са thecode.media — то есть про­ве­рил, откли­ка­ет­ся ли сер­вер с нашим сай­том. Это вид­но из вто­рой стро­ки. Про­грам­ма Ping ста­ла пока­зы­вать ста­ти­сти­ку: полу­чи­ли паке­ты по 64 бай­та за 79 мс. Поль­зо­ва­тель удо­вле­тво­рил­ся резуль­та­том, вышел из про­грам­мы кла­ви­шей Ctrl+C и полу­чил ито­го­вую ста­ти­сти­ку. Сей­час команд­ная стро­ка гото­ва к новым командам 

Быва­ют и дру­гие интер­фей­сы про­грамм. Напри­мер, может быть голо­со­вой интер­фейс: ком­пью­тер вас слу­ша­ет, интер­пре­ти­ру­ет коман­ды, зада­ёт вам вопро­сы голосом.

Может быть интер­фейс в виде чата. Вме­сто того что­бы давать тек­сто­вые коман­ды в команд­ной стро­ке, вы пише­те коман­ды чат-боту.

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

Управление пользователями

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

useradd — создает на сервере новую учетную запись. По сути, нового пользователя. Синтаксис: useradd имя будущей учетной записи. Имя можно указать любое на свой вкус. Потом останется лишь добавить для нового аккаунта пароль.

passwd — задает пароль для учетной записи. Работает вкупе с предыдущей командой. То есть сразу после создания аккаунта, пишем: passwd имя новой учетной записи. После этого система попросит придумать и указать пароль для новой учетной записи.

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

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

usermod — вносит изменения в характеристики существующих учетных записей, лишает их контроля или вовсе приостанавливает работу. Делает все, что не связано с созданием и удалением аккаунтов. Используется только вместе с дополнительными опциями:

  • -с — добавляет комментарий к аккаунту (можно вписать любой текст по желанию, чтобы запомнить для чего нужен выбранный пользователь).
  • -d — меняет расположение домашней директории выбранной учетной записи.
  • -e — указывает время, которое будет существовать аккаунт (после этого сработает автоматический userdel).
  • -g — меняет группу, к которой принадлежит аккаунт.
  • -G — привязывает аккаунт к выбранной группе.
  • -L — блокирует пользователя.
  • -m — перемещает контент из домашней папки пользователя в другую папку.
  • -p — устанавливает незашифрованный пароль (лучше так не делать).
  • -s — задает конкретную оболочку для нового аккаунта на усмотрение администратора компьютера.
  • -U — снимает блокировку с выбранной учетной записи.

Примеры использования SSH

Команда подключения к локальному SSH-серверу из командной строки GNU/Linux или FreeBSD для пользователя pacify (сервер прослушивает нестандартный порт 30000):

$ ssh -p 30000 pacify@127.0.0.1

Генерация пары ключей (в UNIX-подобных ОС) осуществляется командой

$ ssh-keygen

Генерация пары SSH-2 RSA-ключей длиной 4096 бита программой puttygen под UNIX‐подобными ОС:

$ puttygen -t rsa -b 4096 -o sample

Некоторые клиенты, например, PuTTY, имеют и графический интерфейс пользователя.

Для использования SSH в Python существуют такие модули, как python-paramiko и python-twisted-conch.

Шаг 1 — Создание пары ключей

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

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

После ввода команды вы должны увидеть следующее:

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

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

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

Затем вы должны увидеть следующую строку:

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

Вывод затем должен выглядеть примерно следующим образом:

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

Как изменить стандартный порт

Итак, теперь переходим от дискуссии к непосредственной практике – нужно изменить стандартный порт на другой. Сразу возникает вопрос: а на какой порт менять 22-й? Неужели нет разницы в этой цифре? На самом деле разница есть, потому и нужно быть предельно аккуратным при замене номера порта. Хотя многие советуют ставить рандомное значение для этого параметра, лишь бы оно не превышало верхний предел 65535 – выше уже нет портов. То есть вы можете поставить к себе в настройках порт 12345 и любой другой, и от этого якобы ничего не случится. Но на деле все гораздо сложнее.

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

Теперь, когда вы осознали всю ответственность, которую берете на себя, решив изменить стандартное значение порта, можете приступить к его замене. Номер порта указан в файле конфигураций – /etc/ssh/sshd_config. Чтобы его заменить, воспользуйтесь терминалом для вызова этого файла – введите следующую строку: nano /etc/ssh/sshd_config. После открытия файла через поиск или вручную найдите строку Port 22 и поменяйте цифру 22 на другое значение, которое по вашим наблюдениям является свободным. Многие рекомендуют не менять строку Port 22, а закомментировать ее и снизу прописать другой Port с новым значением. Сделать это несложно, так что вы тоже можете так поступить.

Если у вас не получается самостоятельно проверить, какие порты в данный момент заняты различными службами, тогда можете воспользоваться специальной командой. Зайдите в терминал и введите следующую строку: netstat -tupln | grep LISTEN. Перед вами появится список задействованных портов и вам останется лишь придумать свое значение, которого нет в приведенном перечне. После того, как закомментируете текущее значение порта и добавите строку с новым, не забудьте сохранить изменения и перезапустить сервер. Без перезагрузки нововведения не вступят в силу. Для перезапуска введите в терминал команду /etc/init.d/ssh restart, либо если у вас sshd, то пропишите /etc/init.d/sshd restart.

Шаг 4: Защита демона sshd

После установки сервера SSH, первым делом исправить файл sshd_config. В нем запретить удалённый доступ пользователя root и разрешить доступ только для доверенных пользователей. Настраиваем от непривилегированного пользователя, используя sudo.

Первое действие перед правкой любого файла — это бекап этого файла, делаем:

remuserbak@vps:~$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
 password for remuserbak:

Посмотреть текущее настройки демона ssh

sudo sshd -T

Отключение SSH-логин для пользователя root, используя параметр PermitRootLogin no.

remuserbak@vps:~$ sudo nano etcsshsshd_config
 
# Authentication:
PermitRootLogin no # запретить удалённый доступ для root
AllowUsers user1 user2 # список пользователей, которым разрешён доступ по SSH

После внесения изменений в sshd_config — перегружаем демона SSH

$ sudo systemctl restart ssh.service

Теперь при попытке залогинеться с пользователем root, в логах вы увидите запись:

User root from 222.187.238.57 not allowed because not listed in AllowUsers

Всё, у вас демон SSH минимально защищен!

Дополнительные параметры sshd_config, которые можно менять, под ваши задачи и условия, но не делайте это без нужды и предварительно изучите руководство man 5 sshd_config

  • LoginGraceTime 120: Сервер отключается по истечении этого времени, если пользователю не удалась регистрация в системе. Если стоит значение 0, то время ожидания не ограничено. Значение по умолчанию — 120 секунд.
  • StrictModes yes: Проверять наборы прав доступа и принадлежность конфигурационных файлов и домашнего каталога пользователя перед разрешением регистрации в системе. Это рекомендуется выполнять потому, что новички иногда оставляют свои каталоги или файлы доступными для записи всем. Значение по умолчанию — yes.
  • AddressFamily inet: Семейство адресов которое должна использовать служба sshd, допустимые значения: any, inet (только IPv4) и inet6 (только IPv6). Значение по умолчанию — any.
  • Port 22: Порт, на котором следует ожидать запросы на ssh соединение. Значение по умолчанию — 22.

Как пользоваться PuTTY

1. Интерфейс программы

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

Рассмотрим за что отвечают те или иные вкладки программы, чтобы вы ориентировались что и где искать. У нас есть четыре вкладки:

  • Session — отвечает за подключение удаленному серверу, тут мы вводим параметры подключения, порт, адрес, а также можем сохранить все настройки putty, чтобы не настраивать каждый раз заново.
  • Terminal — позволяет включать или отключать возможности терминала;
  • Window — настройка внешнего вида окна, цвет, шрифт, кодировка;
  • Connection — настройка параметров подключения, алгоритма шифрования, сжатия, ключей аутентификации, X11 и других параметров.

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

2. Подключение к удаленному компьютеру PuTTY

Чтобы подключиться к удаленному компьютеру по SSH перейдите на вкладку «Session», здесь, в поле «Host Name» необходимо прописать ip адрес или имя хоста, компьютера, к которому вы хотите подключиться, в поле порт — нужно указать порт, на котором запущен SSH сервер, по умолчанию используется порт 22:

Далее, нажмите кнопку «Open». После этого появится запрос на добавление ключа сервера в список доверенных ключей, нажмите «Да»:

Затем вам будет нужно ввести логин пользователя и пароль

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

Теперь авторизация прошла успешно, и вы можете выполнять нужные действия на сервере:

3. Сохранение сессии PuTTY

Чтобы не вводить каждый раз ip и порт можно сохранить эти данные в виде сессии, для этого пропишите новое имя в поле «Saved Sessions», а затем нажмите кнопку «Save»:

Теперь вы сможете загрузить сохраненную сессию, нажав кнопку «Load».

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

4. Имя пользователя по умолчанию

Вы можете не вводить имя пользователя каждый раз, для этого перейдите на влкадку «Connection», затем «Data» и в поле «Auto-login Username» пропишите имя пользователя, например, root:

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

5. Авторизация по ключу ssh в PuTTY

Чтобы не вводить каждый раз пароль можно настроить авторизацию по ключу. В Linux такая возможность используется очень широко потому что это удобно. Первым делом необходимо создать ключ. Для этого запустите утилиту PuTTYgen и установите переключатель в положение «SSH-2 RSA» нажмите «Generate»:

Обязательно ключ должен быть SSH-2 RSA, если в главном окне нет, выберите в меню «Key». Подвигайте мышкой, чтобы создать достаточное количество энтропии:

Ключ готов, затем, с помощью кнопок «Save Public Key» и «Save Private Key» сохраните оба ключа.

Далее, откройте PuTTY, перейдите на вкладку «Connection», затем «SSH», затем «Auth»:

Здесь необходимо нажать кнопку «Browse» и добавить недавно сохраненный приватный ключ:

Далее, возвращаемся на вкладку «Session», выбираем наше сохранение и нажимаем «Save» чтобы сохранить настройки. Осталось только отправить наш открытый ключ на сервер. Для этого авторизуйтесь на нем с помощью пароля и открытый ключ вставьте ключ в конец файла /root/.ssh/authorized_keys.

Ключ можно брать прямо из окна PuTTYgen «Public key for pasting» или из файла открытого ключа:

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

5. Передача файлов через scp в PuTTY

Не все знают, но PuTTY позволяет передавать файлы через ssh также как это делает linux с помощью утилиты scp. Нажмите Win+R, затем пропишите cmd, чтобы запустить командную строку.

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

pscp опции путь_файлу имя_пользователя@хост/путь/к/файлу/на/удаленном/хосте

Например, мы можем отправить файл из текущей папки в папку пользователя /root/:

С помощью опции -P можно задать удаленный порт:

А опция load позволяет загрузить сохраенные настройки сессии PuTTY:

Теперь вы знаете как использовать putty для передачи файлов.

Подключение к серверу по SSH

Для подключения к серверам с ОС Linux используется протокол SSH. Он позволяет безопасно управлять сервером по сети.

Подключиться к серверу можно:

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

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

  • публичный IP-адрес сервера (поле IP);
  • логин и пароль для доступа в систему (поля Username и Password).

Подключение по SSH из Linux / macOS

Для подключения к серверу по SSH введите в терминале команду:

Где — публичный IP-адрес сервера.

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

Подключение по SSH из Windows

В Windows 10 подключение происходит так же, как в Linux и macOS, но через командную строку (cmd.exe).

В более ранних версиях Windows подключение к серверу происходит с помощью PuTTY:

  1. Запустите PuTTY.
  2. Перейдите на вкладку Session. В поле Host Name укажите публичный IP-адрес сервера, а в поле Port — 22.
  3. Укажите тип соединения SSH в поле Connection type.
  4. Если вы подключаетесь с помощью , перейдите на вкладку SSH — Auth, нажмите Browse и выберите файл с приватным ключом.
  5. Нажмите Open, чтобы подключиться.
  6. Подтвердите подключение. В открывшейся консоли укажите логин и пароль для входа на сервер. Если вы ранее создавали пару ключей, то для подключения к серверу пароль указывать не требуется.

Создание пары ключей в Linux / macOS

Чтобы создать пару ключей:

Откройте терминал и выполните команду:

В консоли появится следующий диалог:

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

Система предложит ввести кодовую фразу для дополнительной защиты:

Этот шаг можно пропустить.

Будет создан закрытый ключ () и открытый ключ ()

В консоли появится следующее сообщение:

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

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

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

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

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

В Windows 10 создать пару ключей можно таким же образом, как в Linux и macOS, но через командную строку (cmd.exe).

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

  1. Установите PuTTY и запустите приложение PuTTYgen.
  2. В меню Type of key to generate выберите тип ключа RSA и нажмите Generate. Перемещайте курсор по экрану до тех пор, пока не будут созданы ключи.
  3. После создания пары ключей открытый ключ будет выведен на экран. Нажмите Save public key и сохраните его в текстовом файле, например в новом файле с названием .
  4. В поле Key passphrase введите кодовую фразу для дополнительной защиты. Этот шаг можно пропустить.
  5. Нажмите Save private key для сохранения закрытого ключа.
  6. Добавьте открытый ключ в панели управления Selectel – на вкладке Операционная система на странице сервера нажмите кнопку Изменить конфигурацию сервера и введите ключ в поле SSH.

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

Вход в систему

После успешной аутентификации пользователя выполняются следующие действия:

  • Если регистрация в системе произведена на терминале (tty) и не указана никакая команда, то отображается время последнего входа в систему и содержимое файла /etc/motd (если только это не отключено в файле конфигурации или ~/.hushlogin).
  • Если регистрация в системе произведена на терминале, записывается время регистрации.
  • Проверяется /etc/nologin, если он присутствует, выводится его содержимое и завершается работа (исключение — root).
  • Осуществляется переход к выполнению с правами обычного пользователя.
  • Устанавливаются значения основных переменных среды.
  • Интерпретируется файл ~/.ssh/environment, если таковой имеется, и пользователям разрешено изменять среду.
  • Переходит в домашний каталог пользователя.
  • Если имеется файл ~/.ssh/rc, то производится его выполнение, а если нет, но имеется /etc/ssh/sshrc, то выполняется он, в противном случае не выполняется ничего.  Файлам «rc» на стандартный ввод передаётся протокол аутентификации Х11 и cookie.
  • Запускается оболочка пользователя или выполняется указанная команда.

Перенаправление порта

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

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

Существует три типа переадресации портов SSH:

Перенаправление локального порта

Перенаправление локального порта позволяет вам перенаправить соединение с клиентского хоста на хост-сервер SSH, а затем на порт хоста назначения.

Чтобы создать переадресацию локального порта, передайте параметр клиенту :

Параметр -f указывает команде работать в фоновом режиме, а не выполнять удаленную команду.

Перенаправление удаленного порта

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

Параметр указывает создать переадресацию удаленного порта:

Динамическая переадресация портов

Динамическая переадресация портов создает прокси-сервер SOCKS, который обеспечивает связь через диапазон портов.

Чтобы создать динамическую переадресацию портов (SOCKS), передайте параметр клиенту ssh:

Более подробную информацию и пошаговую инструкцию смотрите в статье Как настроить SSH-туннелирование (перенаправление портов) .

Аутентификация

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

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

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

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

Ассиметричное шифрование отличается от симметричного тем, что для передачи данных в одном направлении, требуются два связанных друг с другом ключа. Один из них известен как приватный (private key), другой называется публичным (public key).

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

Private key должен храниться максимально безопасно. Никогда и ни при каких обстоятельствах его нельзя передавать третьим лицам или публиковать где-либо. Иначе парадигма public/private ключей работать не будет. Поскольку, расшифровать данные можно лишь с помощью него, сам факт извлечения информации говорит о том, что хост владеет приватным ключом.

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

Более детально можно рассмотреть ассиметричное шифрование на примере key-based авторизации. Клиент создает пару ключей, затем копирует свой публичный ключ на сервер, в специальный файл authorized_keys, в домашней директории пользователя (~/.ssh).

После того, как зашифрованное соединение будет установлено, клиент должен авторизоваться для дальнейшей работы. Сервер использует public key из указанного выше файла, для зашифровывания специального проверочного сообщения. Если клиент сможет его расшифровать, это означает, что он владеет «ответным» приватным ключом. Таким образом, сервер авторизует пользователя, поскольку ни у кого больше нет private key, по условиям парадигмы.

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

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

Adblock
detector