Computer Science and Software Engineering
April 12, 2023

SSH: настройка и использование безопасного удаленного доступа

  1. Введение в SSH
  2. Настройка SSH сервера
  3. Ключи SSH
  4. Мульти ключи
  5. Дополнительные настройки безопасности
  6. Бонус

Введение в SSH

Что такое SSH?

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

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

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

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

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

Зачем нужен SSH?

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

Основные возможности SSH включают:

  1. Удаленный доступ к устройствам: SSH предоставляет возможность удаленного доступа к устройствам, что позволяет пользователям работать с удаленными устройствами, не находясь физически рядом с ними. Это делает SSH удобным инструментом для администрирования удаленных устройств. Кроме того, SSH позволяет работать в консоли, что может быть полезно для автоматизации и удаленного управления.
  2. Шифрование: SSH использует различные методы шифрования, такие как RSA, DSA, ECDSA и Ed25519, для обеспечения безопасности передачи данных между устройствами. Это позволяет пользователям работать с удаленными устройствами, не беспокоясь о безопасности своих данных.
  3. Аутентификация: SSH использует различные методы аутентификации, такие как пароли, ключи и сертификаты, для проверки легитимности пользователей и устройств. Это обеспечивает безопасность удаленного доступа и предотвращает несанкционированный доступ к устройствам.
  4. Поддержка множества платформ: SSH может быть использован на различных платформах, таких как Unix, Linux, macOS и Windows, что делает его удобным инструментом для работы с различными операционными системами.
  5. Работа с файлами и сжатие данных: SSH может использоваться для передачи файлов между устройствами, что позволяет пользователям обмениваться файлами между удаленными устройствами. Может использовать сжатие данных, что позволяет пользователям передавать данные более быстро и эффективно.
  6. Мультиплексирование: SSH позволяет пользователям создавать несколько соединений с удаленными устройствами через одно соединение SSH, что уменьшает нагрузку на сеть и обеспечивает более эффективную работу с удаленными устройствами.
  7. Перенаправление портов: SSH может использоваться для перенаправления портов, что позволяет пользователям получать доступ к удаленным устройствам через другие устройства, такие как маршрутизаторы, фаерволы или прокси-серверы.
  8. Протокол туннелирования: SSH может использоваться в качестве протокола туннелирования, что позволяет пользователям обращаться к удаленным ресурсам через безопасный туннель, обходя фаерволы и другие ограничения сети.

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

Настройка SSH сервера

Установка SSH сервера

Установка SSH-сервера может отличаться в зависимости от операционной системы, на которой вы хотите установить SSH-сервер. В большинстве случаев для Linux-серверов используется OpenSSH, который является наиболее популярным SSH-сервером на сегодняшний день. Для установки OpenSSH-сервера на Linux-сервере обычно выполняют следующие действия:

  1. Обновление пакетов: перед установкой SSH-сервера следует обновить список пакетов операционной системы, чтобы убедиться, что вы устанавливаете последнюю версию OpenSSH.
    Для этого выполните команду:
    sudo apt-get update
  2. Установка OpenSSH-сервера: после обновления списка пакетов можно установить OpenSSH-сервер. Для этого выполните команду:
    sudo apt-get install openssh-server
  3. Настройка параметров безопасности: после установки OpenSSH-сервера рекомендуется настроить параметры безопасности для обеспечения безопасности соединения SSH. В файле конфигурации /etc/ssh/sshd_config можно настроить различные параметры безопасности, такие как порт SSH, разрешенные методы аутентификации, требования к длине паролей и т.д.
  4. Запуск SSH-сервера: после установки и настройки OpenSSH-сервера его можно запустить, выполнив команду:
    sudo systemctl start ssh

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

Настройка конфигурационного файла SSH

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

Некоторые из основных параметров, которые можно настроить в конфигурационном файле SSH:

  • Port: порт, используемый SSH-сервером для подключения. По умолчанию используется порт 22, но его можно изменить на любой другой доступный порт.
  • PermitRootLogin: определяет, можно ли пользователю root подключаться к SSH-серверу. Рекомендуется отключить эту опцию для повышения безопасности сервера.
  • PasswordAuthentication: определяет, можно ли пользователю аутентифицироваться с помощью пароля. Рекомендуется отключить эту опцию и использовать аутентификацию на основе ключей.
  • AllowUsers: определяет список пользователей, которые могут подключаться к SSH-серверу. Если список пуст, подключение разрешено всем пользователям.
  • PubkeyAuthentication: определяет, можно ли пользователю аутентифицироваться с помощью ключей. Рекомендуется включить эту опцию и использовать аутентификацию на основе ключей.
  • AuthorizedKeysFile: определяет путь к файлу, в котором хранятся публичные ключи пользователей имеющие право доступа к серверу.
  • Protocol: определяет версию протокола SSH, которую использует сервер. По умолчанию используется версия 2.
  • MaxAuthTries: определяет количество попыток аутентификации, которые разрешены для каждой сессии SSH.
  • MaxSessions: определяет максимальное количество одновременных сеансов, которые разрешены для каждого пользователя.

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

sudo systemctl restart ssh

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

Ключи SSH

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

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

Процесс аутентификации с использованием ключей SSH состоит из нескольких шагов. Во-первых, клиент генерирует пару ключей: открытый и закрытый. Открытый ключ отправляется на сервер, это можно сделать различными способами, например, скопировав его в файл ~/.ssh/authorized_keys на удаленном сервере. Закрытый ключ хранится на компьютере пользователя.

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

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

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

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

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

Для создания ключей SSH используются различные алгоритмы шифрования. Наиболее распространенными являются RSA, DSA и ECDSA, Ed25519.

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

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

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

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

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

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

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


Для создания ключей с помощью ECDSA используйте команду:

ssh-keygen -t ecdsa -b 521

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

Для создания ключей с помощью Ed25519 используйте команду:

ssh-keygen -t ed25519

Данная команда создаст новую пару ключей Ed25519.

Кроме того, рекомендуется использовать ключи с длиной не менее 2048 бит для RSA и 256 бит для ECDSA и Ed25519 для обеспечения безопасности.

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

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

chmod 700 ~/.ssh

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

chmod 600 ~/.ssh/id_ecdsa
chmod 600 ~/.ssh/id_ecdsa.pub

где id_ecdsa и id_ecdsa.pub - это файлы приватного и публичного ключа соответственно. Если вы используете ключи другого типа, то замените их имена в командах выше на соответствующие.

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

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

ssh-copy-id user@server

где user - имя пользователя на сервере, а server - адрес сервера.

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

Как добавить ключи на сервер

Для добавления ключей на сервер есть несколько способов. Один из самых простых способов - использовать команду ssh-copy-id.

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

Чтобы добавить публичный ключ на сервер с помощью ssh-copy-id, выполните следующие шаги:

  1. Открыть терминал на локальной машине.
  2. Ввести команду ssh-copy-id -i /path/to/key user@server, где /path/to/key - путь до файла с публичным ключом, user - имя пользователя на сервере, к которому добавляем ключ, server - адрес сервера. Если ключ находится в домашней директории и называется по умолчанию, можно просто ввести ssh-copy-id user@server.
  3. Ввести пароль пользователя на сервере.

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

  1. Откройте терминал на локальной машине.
  2. Введите команду ssh user@server, где user - имя пользователя на сервере, а server - IP-адрес или доменное имя сервера.
  3. Введите пароль пользователя на сервере.
  4. Создайте файл authorized_keys в директории ~/.ssh на сервере, если его еще нет. Вы можете использовать команду mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys для создания файла.
  5. Откройте файл authorized_keys в редакторе: nano ~/.ssh/authorized_keys
  6. Скопируйте содержимое публичного ключа на локальной машине
    cat ~/.ssh/id_ed25519.pub
  7. Вставьте содержимое публичного ключа в открытый вами файл authorized_keys на сервере и сохраните изменения.

После того, как вы добавили публичный ключ на сервер, убедитесь, что у файла authorized_keys на сервере правильно настроены права доступа. Рекомендуется установить права доступа 600 для файла authorized_keys. Это можно сделать с помощью команды chmod 600 ~/.ssh/authorized_keys.

Мульти ключи

Что такое мульти ключи?

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

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

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

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

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

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

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

Для использования мульти ключей в OpenSSH необходимо создать файл config в директории ~/.ssh на клиентской машине и добавить соответствующие настройки. Например, для использования двух ключей id_rsa и id_ed25519:

Host example.com
     IdentityFile ~/.ssh/id_rsa
Host example.com
     IdentityFile ~/.ssh/id_ed25519

В данном примере, когда клиент пытается подключиться к серверу example.com, он автоматически использует ключ id_rsa. Если ключ id_rsa не подходит для сервера, клиент автоматически попытается использовать ключ id_ed25519.

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


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

Host example.com
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

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

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

Дополнительные настройки безопасности

Изменение порта SSH

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

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

  1. Откройте файл конфигурации SSH на сервере. По умолчанию файл расположен по пути /etc/ssh/sshd_config.
  2. Найдите строку, содержащую порт SSH. Строка может выглядеть так:
    #Port 22`
  3. Раскомментируйте строку и измените значение порта на желаемый порт. Например, если вы хотите изменить порт на 2222, строка должна выглядеть следующим образом: Port 2222
  4. Сохраните изменения в файле конфигурации.
  5. Перезапустите службу SSH на сервере, чтобы применить изменения в конфигурации. Это можно сделать с помощью команды:
    sudo service sshd restart
  6. После изменения порта необходимо обновить настройки брандмауэра. Если на сервере используется стандартный брандмауэр iptables, то следующая команда позволит открыть доступ к новому порту:
    sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

При подключении к серверу через SSH теперь необходимо указывать новый порт. Например, если вы изначально подключались к серверу с использованием команды: ssh username@your_server_ip

Теперь вам необходимо использовать команду:
ssh -p 2222 username@your_server_ip

Также рекомендуется включить опцию StrictHostKeyChecking и указать путь до файла UserKnownHostsFile, чтобы избежать проблем с подключением к серверу после изменения порта SSH. Эти опции можно добавить в файл конфигурации SSH на клиентской машине (~/.ssh/config) следующим образом:

Host your_server_ip
    Port 2222
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Замените "your_server_ip" на реальный IP-адрес вашего сервера. Опция StrictHostKeyChecking отключает проверку соответствия ключей, а UserKnownHost указывает на файл, где будут храниться ключи сервера. В данном случае мы указали /dev/null, что означает, что все ключи будут игнорироваться.

Ограничение доступа по IP адресу

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

Для ограничения доступа по IP-адресу на сервере Linux с SSH-доступом можно использовать конфигурационный файл sshd_config. Этот файл обычно находится в директории /etc/ssh и управляет поведением сервера SSH.

Для того чтобы ограничить доступ только для конкретных IP-адресов, нужно изменить конфигурационный файл и добавить параметр "ListenAddress" с нужными IP-адресами. Например, чтобы разрешить доступ только для IP-адреса 192.168.1.100, нужно добавить следующую строку в файл sshd_config:

ListenAddress 192.168.1.100

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

iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Первая команда добавляет правило для разрешения доступа для IP-адреса 192.168.1.100 на порт 22 (SSH-порт), а вторая команда запрещает доступ для всех остальных IP-адресов.

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

Ограничение доступа по пользователю

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

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

  1. Создайте пользователя на сервере: sudo adduser <имя_пользователя>
  2. Затем необходимо добавить публичный ключ пользователя в файл authorized_keys в его домашней директории на сервере. Предположим, у вас есть публичный ключ id_ecdsa.pub на локальной машине. В этом случае можно использовать команду ssh-copy-id для копирования ключа на сервер:
    ssh-copy-id -i ~/.ssh/id_ecdsa.pub <имя_пользователя>@<ip_адрес>
    Эта команда скопирует публичный ключ на сервер и добавит его в файл authorized_keys в домашней директории указанного пользователя.
  3. Отредактируйте файл /etc/ssh/sshd_config на сервере и добавьте следующую строку: AllowUsers <имя_пользователя> Данная строка позволяет указать, какие пользователи могут подключаться к серверу по SSH. Если необходимо разрешить доступ более, чем одному пользователю, просто перечислите их имена через пробел.
  4. Перезапустите SSH-сервер для применения настроек:
    sudo systemctl restart sshd

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

Использование многофакторной аутентификации (MFA)

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

Настройте конфигурацию SSH для использования двухфакторной аутентификации. Откройте файл /etc/ssh/sshd_config в текстовом редакторе и установите следующие параметры:

ChallengeResponseAuthentication yes 
UsePAM yes
AuthenticationMethods publickey,password publickey,keyboard-interactive
PubkeyAuthentication yes

Это позволит использовать двухфакторную аутентификацию при входе по SSH.

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

sudo systemctl restart sshd

Для второго фактора аутентификации мы будем использовать приложение TOTP (Time-Based One-Time Password), которое генерирует одноразовые коды на основе времени.

Установите приложение TOTP на свой мобильный телефон. Существует множество приложений, таких как Google Authenticator, Authy, FreeOTP и др.

Установка Google Authenticator на сервер Ubuntu/Debian установите Google Authenticator с помощью следующей команды:

sudo apt-get install libpam-google-authenticator

Для других дистрибутивов Linux можно установить Google Authenticator, используя пакетный менеджер, например, yum или pacman.

Настройка Google Authenticator Выполните следующую команду для создания файла настройки TOTP для вашего пользователя:

google-authenticator

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

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

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

Настройка SSH для использования двухфакторной аутентификации

Откройте файл /etc/pam.d/sshd с помощью любого текстового редактора и добавьте следующую строку:

# Standard Un*x password updating. 
@include common-password
auth required pam_google_authenticator.so

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

Отключаем вход по паролю (если не нужен третий фактор)

# Standard Un*x authentication. 
#@include common-auth

Сохраните изменения и перезапустите службу SSH, чтобы изменения вступили в силу:

sudo systemctl restart sshd

Потеря доступа к приложению TOTP

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

Важно!
Эти коды одноразового использования. По умалчанию создаются 5 шт.

Изменение настроек аутентификации MFA

Вам нужно войти в систему с помощью кода восстановления и удалить файл /home/username/.google_authenticator (где username - имя вашего пользователя).

Затем выполните команду google-authenticator и следуйте инструкциям для создания нового файла настройки TOTP. При этом вам будет предложено использовать сохраненные коды восстановления.

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

Бонус

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

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

  1. Установить SSH-клиент, если он еще не установлен на вашем компьютере.
  2. Открыть терминал и выполнить команду:
    ssh -D 8080 user@remote_server
    Здесь:
    • -D 8080 указывает порт, который будет использоваться для прокси-сервера;
    • user - имя пользователя на удаленном сервере;
    • remote_server - IP-адрес или доменное имя удаленного сервера.
  3. В настройках вашего браузера выберите ручную настройку прокси-сервера и указать следующие параметры:
    • SOCKS Host: 127.0.0.1
    • SOCKS Port: 8080
    • Proxy Type: SOCKS v5
  4. Теперь все веб-запросы, отправляемые через браузер, будут проходить через SSH SOCKS-прокси-сервер, который находится на вашем компьютере и направляет запросы через удаленный сервер.

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

Проброс портов (port forwarding)

Проброс портов (port forwarding) - это механизм, который позволяет перенаправлять сетевой трафик с одного порта на локальной машине на другой порт на удаленной машине или наоборот. Это может быть полезно, когда вы хотите получить доступ к удаленной машине, которая находится за маршрутизатором или фаерволом.

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

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

Пример использования проброса портов:

ssh -L 8080:localhost:80 user@your_server_ip

В этом примере мы перенаправляем трафик с локального порта 8080 на порт 80 на удаленном сервере. Это означает, что если вы откроете веб-браузер и перейдете на адрес http://localhost:8080, то вы увидите содержимое веб-сайта, который запущен на удаленном сервере на порту 80.

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

ProxyJump (или Jump Host) позволяет создавать цепочки SSH-соединений для удаленного доступа к устройствам, которые не имеют прямого доступа извне. Например, если у вас есть локальный компьютер A, который не может напрямую подключиться к удаленному компьютеру C, но у вас есть доступ к промежуточному серверу B, то вы можете использовать ProxyJump для доступа к компьютеру C через промежуточный сервер B.

Пример использования ProxyJump:

ssh -J user@jump_server_ip user@target_server_ip

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

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

ssh -J user@jump_server_ip -L 8080:localhost:80 user@target_server_ip

Это позволит нам подключиться к серверу target_server_ip через сервер jump_server_ip и использовать проброс портов для перенаправления трафика с локального порта 8080 на порт 80 на удаленном сервере.