OpenSSH: различия между версиями

Материал из SysWiki
создание заготовки страницы
 
доработка раздела про ssh-keygen и создание раздела про вопросы безопасности
 
(не показано 10 промежуточных версий этого же участника)
Строка 1: Строка 1:
OpenSSH — приложение для работы по протоколу SSH, включающее в себя и клиентскую, и серверную часть. Является фактическим стандартом для Linux и многих других UNIX-подобных операционных систем.
OpenSSH — набор приложений для защищённой передачи данных, включающий в себя и клиентскую, и серверную часть. Является фактическим стандартом для Linux и многих других UNIX-подобных операционных систем.
 
== Установка ==
Как правило, OpenSSH устанавливается при установке системы. В случае его отсутствия он может быть установлен следующей командой (на примере Debian GNU/Linux, установка и клиентской и серверной части):
 
  apt install openssh-client openssh-server
 
== Приложения, входящие в состав OpenSSH ==
В состав OpenSSH в частности входят следующие приложения:
 
* sshd — сервер
* ssh — клиент
* ssh-keygen — утилита для генерирования ключей и управления ими
* ssh-agent — приложение для хранения расшифрованных ключей в памяти
* ssh-add — утилита для добавления ключа для использования в ssh-agent
* scp — утилита для безопасного копирования файлов, аналогичная утилите копирования cp
* sftp — утилита для безопасной передачи файлов, аналогичная ftp-клиенту
 
=== sshd ===
Программа sshd является сервером SSH. Как правило, запускается автоматически. Основной конфигурационный файл сервера — это обычно <code>/etc/ssh/sshd_config</code>. Ошибки в конфигурации sshd могут привести к потере возможности подключения к удалённому серверу, редактировать этот файл при удалённом подключении следует с осторожностью, хотя обычно, при перезапуске OpenSSH с новым конфигурационным файлом старые соединения сохраняются, это, с одной стороны, даёт возможность исправить ошибку, а, с другой, следует помнить, что работа текущего соединения после перезапуска сервера не означает, что конфигурация правильная, следует убедиться,  возможны ли новые подключения.
 
=== ssh ===
Программа ssh является клиентом для подключения к SSH-серверу. Кроме предоставления доступа к командной оболочке удалённого сервера она также позволяет создавать защищённые туннели.
 
Обычный пример использования программы ssh:
 
  ssh user@example.com
 
Данный пример показывает обычный сценарий работы, подключение к серверу example.com от имени пользователя user.
 
При первом подключении приложение сообщит информацию об отпечатке ключа сервера и предложит подтвердить подключение (если вы заботитесь о безопасности, у вас должен быть отпечаток ключа сервера, его можно получить от администратора, также, к примеру, многие хостинг-провайдеры, предоставляющие доступ по ssh, публикуют информацию об отпечатках используемых ключей на своих сайтах).
 
Далее приложение ssh попытается осуществить аутентификацию. Обычный порядок действий такой: сначала будет осуществлена попытка использовать ключи, которые предоставит ssh-agent и ключи, находящиеся по стандартным именам (например, ~/.ssh/id_ed25519, ~/.ssh/id_rsa), в случае, если ни один ключ не будет принят сервером, то будет выдан запрос на ввод пароля.
 
Вы можете указать ключ, который ssh должен использовать, при помощи опции -i:
 
ssh -i ~/.ssh/id_ed25519 user@example.com
 
Это может быть полезно в том случае, если ключ находится по нестандартному пути, а также в ситуации, когда настройки сервера требуют прерывать соединение при нескольких неудачных попытках соединения, и ssh, перебирая ключи, не успевает дойти до правильного. В таких ситуациях выводится сообщение «Too many authentication failures», и решить проблему можно указав нужный ключ при помощи опции -i.
 
Такая же ошибка может возникнуть в ситуации, когда у вас нет ключа, подходящего для сервера, вам нужно зайти туда при помощи пароля, но ssh, перебирая имеющиеся ключи, просто не даёт дойти до парольной аутентификации, поскольку сервер отключается раньше, и вы получаете сообщение об ошибке «Too many authentication failures». Чтобы указать ssh, что при данном подключении не нужно использовать ключи, что требуется использовать только аутентификацию по паролю, можно использовать следующий вариант:
 
  ssh -o PreferredAuthentications=password user@example.com
 
<code>PreferredAuthentications</code> — это имя параметра из конфигурационного файла ssh, определяющего предпочтительные методы аутентификации, а при помощи опции командной строки -o можно устанавливать такие параметры для отдельных соединений, не меняя файл настроек, в данном случае можно установить его в <code>password</code>, что укажет ssh, что нужно использовать только аутентификацию по паролю.
 
=== ssh-keygen ===
Программа ssh-keygen предназначена для генерирования криптографических пар ключей, используемых для аутентификации вместо паролей. Пример генерации криптографической пары ключей:
 
  ssh-keygen -t ed25519 -C 'My personal key'
 
Здесь при помощи параметра -t указан тип ключа, при помощи параметра -C указан комментарий, который будет добавлен в открытый ключ.
 
После запуска приложение запросит имя файла для сохранения секретного ключа. В данном примере это будет файл .ssh/id_ed25519 в домашнем каталоге пользователя (т..е полный путь может выглядеть примерно так: /home/user/.ssh/id_ed25519), обычно нет необходимости его менять (если только уже не существует другой ключ, находящийся в том файле). Далее будет запрошен пароль и, далее, подтверждение пароля. Пароль будет невозможно сбросить, если вы его забудете, при этом хорошим тоном является установка стойкого к подбору пароля достаточной длины. Рядом с файлом секретного ключа будет создан файл с публичным ключом, отличающийся от него расширением .pub.
 
Содержимое файла публичного ключа нужно добавить в файл authorized_keys в подкаталоге .ssh домашнего каталога пользователя, от имени которого вы должны входить в систему. Этот файл содержит строки вида:
  ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDFsStlpvJs9a+/R+B5YKPkTm0KmTOJ1YSBjne+iO1NQ My personal key
Сначала идёт тип ключа, далее идёт открытый ключ и, далее, комментарий. Также эти строки могут содержать дополнительные опции подключения.
 
Также утилита ssh-keygen позволяет посмотреть отпечаток ключа сервера. Когда вы впервые подключаетесь к серверу SSH, то клиентское приложение показывает вам отпечаток ключа сервера, и вам следует сравнить его с реальным отпечатком ключа сервера, во избежание атаки типа [[MITM]]. Администратор сервера может посмотреть отпечаток ключа командой вида:
 
  ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
 
В этой команде первый ключ -l означает просмотр отпечатка, после ключа -f идёт путь к открытому ключу, они по умолчанию  имеют имена вида /etc/ssh/ssh_host_TYPE_key.pub, где вместо TYPE стоит тип ключа (rsa, ed25519 и т.д.).
 
Иногда клиентское приложение выводит отпечаток ключа не в том виде, в котором вы его ожидаете увидеть. Например, отпечаток вы ожидаете увидеть как непрерывную строку алфавитно-цифровых символов, а клиент SSH показывает  строку байт в шестнадцатеричном виде, разделённых двоеточиями. В таких случаях нужно выбрать формат, в котором программа выдаст информацию об отпечатке ключа, это делается при помощи ключа -E. Вот например как выглядит команда получения информации о ключе RSA, с выводом отпечатка ключа, полученного по алгоритму MD5:
 
  ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub -E md5
 
=== ssh-agent и ssh-add ===
При аутентификации по ключу используется криптографическая пара ключей, открытый ключ известен серверу, а закрытый находится на стороне пользователя, подключающегося к серверу. Закрытый ключ, в целях безопасности, рекомендуется защищать паролем, но это означает, что, без использования дополнительных средств, пользователю придётся вводить пароль каждый раз, когда он будет подключаться к серверу. Это не очень удобно, при этом убирать пароль не рекомендуется из соображений безопасности. При работе в Linux в графическом интерфейсе пароль может потребоваться вводить только один раз (до выхода пользователя из системы), то есть, задача обычно решается автоматически, без дополнительной настройки системы. При работе из консоли соответствующий результат можно получить при помощи пары утилит: ssh-agent и ssh-add. Сначала запускается ssh-agent, этот процесс будет хранить информацию о ключах, и, далее, при помощи ssh-add туда передаётся информация о ключе (на этом этапе нужно будет ввести пароль от него), и, далее, ssh сможет многократно использовать этот ключ без дополнительного запроса пароля.
 
==== ssh-agent ====
Утилита ssh-agent служит для сохранения открытого ключа в расшифрованном виде между подключениями.  Данное приложение запускается не совсем обычным образом (в примере предполагается использование командной оболочки bash):
 
  eval $(ssh-agent -s)
 
Смысл этой конструкции в следующем. При вызове ssh-agent -s программа запускает фоновый процесс для работы с ключами, информация для подключения к нему выводится в виде текста, содержащего команды оболочки, устанавливающие должным образом значения нескольких переменных, например:
 
  SSH_AUTH_SOCK=/tmp/ssh-43fFGNj1mMxC/agent.284145; export SSH_AUTH_SOCK;
  SSH_AGENT_PID=284146; export SSH_AGENT_PID;
  echo Agent pid 284146;
 
А при помощи конструкции eval $(...) полученный код выполняется в контексте текущей командной оболочки. Конечным результатом является установка в текущем сеансе переменных SSH_AGENT_PID и SSH_AUTH_SOCK, содержащих данные для подключения к ssh-agent. Эти данные будут нужны утилите ssh-add.
 
==== ssh-add ====
Утилита ssh-add добавляет данные заданного ключа в фоновый процесс ssh-agent (который должен быть запущен ранее). Утилита обычно используется в таком формате:
 
  ssh-add ~/.ssh/id_ed25519
 
Команда запросит пароль к заданному ключу. После чего ключ можно будет использовать без ввода пароля (до завершения процесса ssh-agent или удаления из него информации о ключе).
 
=== scp ===
Утилита scp служит для копирования файлов по защищённому протоколу SCP между системами. Пример использования:
 
  scp -p file.txt user@example.com:/home/user/tmp
 
В данном примере копируется файл file.txt на сервер example.com, в каталог /home/user/tmp, подключаясь к серверу под именем пользователя user. Ключ -p означает, что у скопированных файлов время модификации и доступа будут совпадать с исходными (иначе они будут соответствовать времени копирования).
 
  scp -pr directory user@example.com:/home/user/tmp
 
В данном примере копируется каталог directory со всем его содержимым (за что отвечает ключ -r, означающий рекурсивное копирование).
 
Обратите внимание, что результат копирования будет разный в зависимости от того, существует последний элемент пути назначения или нет. Допустим, в последнем примере в каталоге directory находится файл file.txt. И, если бы на сервере в каталоге /home/user не было бы каталога tmp, то он был бы создан, а содержимое directory было бы скопировано в него, то есть, на сервере появился бы файл /home/user/tmp/file.txt, или это можно сформулировать так, что каталог directory был бы скопирован на сервер под новым именем tmp. А если бы каталог tmp там уже существовал, то внутрь него был бы скопирован каталог directory вместе со всем содержимым, то есть, появился бы файл /home/user/tmp/directory/file.txt.
 
=== sftp ===
Утилита sftp предназначена для копирования файлов между системами по защищённому протоколу. Работа с нею осуществляется иначе, чем с утилитой scp — пользователь подключается к удалённому серверу, может просматривать содержимое его каталогов и вводить команды для копирования файлов на сервер или с него.
 
== Основные вопросы безопасности при использовании OpenSSH ==
OpenSSH является фактическим стандартном для предоставления удалённого доступа к командной оболочке в UNIX-подобных операционных системах, много лет обеспечивая защиту множества систем во всём мире. При этом неправильное использование даже надёжного криптографического программного обеспечения может предоставить злоумышленникам возможность взломать систему. В случае с OpenSSH пользователь и администратор системы могут совершить следующие ошибки:
 
* не проверить отпечаток ключа сервера (это создаст условия для атаки типа [[MITM]]);
* не проверить подлинность открытого ключа, отправленного, в частности, по электронной почте (злоумышленник может отправить свой ключ под видом ключа легального пользователя);
* отправить закрытый ключ вместо открытого (администратор системы, которому по ошибке переслали закрытый ключ, может получить техническую возможность подключения к другим системам от имени данного пользователя);
* не использовать пароль для закрытого ключа (взлом или заражение системы могут привести к утечке ключа и заражению множества других систем);
* использовать ключ устаревшего типа или недостаточной длины (в OpenSSH периодически добавляется поддержка ключей новых типов, при этом использование старых по умолчанию отключается);
* использовать слабый пароль (если вы посмотрите логи системы, подключённой к Интернет, то скорее всего увидите там множественные попытки подбора пароля для SSH).
 
Для уменьшения вероятности взлома часто рекомендуют изменить настройки сервера SSH для работы на нестандартном порту, однако само по себе это малоэффективно, поскольку порт будет найден при сканировании портов системы, но это может дать дополнительную защиту в сочетании с автоматической блокировкой адресов, с которых осуществляется попытка соединения на стандартный порт сервера SSH.

Текущая версия от 01:05, 2 марта 2024

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

Установка

Как правило, OpenSSH устанавливается при установке системы. В случае его отсутствия он может быть установлен следующей командой (на примере Debian GNU/Linux, установка и клиентской и серверной части):

 apt install openssh-client openssh-server

Приложения, входящие в состав OpenSSH

В состав OpenSSH в частности входят следующие приложения:

  • sshd — сервер
  • ssh — клиент
  • ssh-keygen — утилита для генерирования ключей и управления ими
  • ssh-agent — приложение для хранения расшифрованных ключей в памяти
  • ssh-add — утилита для добавления ключа для использования в ssh-agent
  • scp — утилита для безопасного копирования файлов, аналогичная утилите копирования cp
  • sftp — утилита для безопасной передачи файлов, аналогичная ftp-клиенту

sshd

Программа sshd является сервером SSH. Как правило, запускается автоматически. Основной конфигурационный файл сервера — это обычно /etc/ssh/sshd_config. Ошибки в конфигурации sshd могут привести к потере возможности подключения к удалённому серверу, редактировать этот файл при удалённом подключении следует с осторожностью, хотя обычно, при перезапуске OpenSSH с новым конфигурационным файлом старые соединения сохраняются, это, с одной стороны, даёт возможность исправить ошибку, а, с другой, следует помнить, что работа текущего соединения после перезапуска сервера не означает, что конфигурация правильная, следует убедиться, возможны ли новые подключения.

ssh

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

Обычный пример использования программы ssh:

 ssh user@example.com

Данный пример показывает обычный сценарий работы, подключение к серверу example.com от имени пользователя user.

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

Далее приложение ssh попытается осуществить аутентификацию. Обычный порядок действий такой: сначала будет осуществлена попытка использовать ключи, которые предоставит ssh-agent и ключи, находящиеся по стандартным именам (например, ~/.ssh/id_ed25519, ~/.ssh/id_rsa), в случае, если ни один ключ не будет принят сервером, то будет выдан запрос на ввод пароля.

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

ssh -i ~/.ssh/id_ed25519 user@example.com

Это может быть полезно в том случае, если ключ находится по нестандартному пути, а также в ситуации, когда настройки сервера требуют прерывать соединение при нескольких неудачных попытках соединения, и ssh, перебирая ключи, не успевает дойти до правильного. В таких ситуациях выводится сообщение «Too many authentication failures», и решить проблему можно указав нужный ключ при помощи опции -i.

Такая же ошибка может возникнуть в ситуации, когда у вас нет ключа, подходящего для сервера, вам нужно зайти туда при помощи пароля, но ssh, перебирая имеющиеся ключи, просто не даёт дойти до парольной аутентификации, поскольку сервер отключается раньше, и вы получаете сообщение об ошибке «Too many authentication failures». Чтобы указать ssh, что при данном подключении не нужно использовать ключи, что требуется использовать только аутентификацию по паролю, можно использовать следующий вариант:

 ssh -o PreferredAuthentications=password user@example.com

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

ssh-keygen

Программа ssh-keygen предназначена для генерирования криптографических пар ключей, используемых для аутентификации вместо паролей. Пример генерации криптографической пары ключей:

 ssh-keygen -t ed25519 -C 'My personal key'

Здесь при помощи параметра -t указан тип ключа, при помощи параметра -C указан комментарий, который будет добавлен в открытый ключ.

После запуска приложение запросит имя файла для сохранения секретного ключа. В данном примере это будет файл .ssh/id_ed25519 в домашнем каталоге пользователя (т..е полный путь может выглядеть примерно так: /home/user/.ssh/id_ed25519), обычно нет необходимости его менять (если только уже не существует другой ключ, находящийся в том файле). Далее будет запрошен пароль и, далее, подтверждение пароля. Пароль будет невозможно сбросить, если вы его забудете, при этом хорошим тоном является установка стойкого к подбору пароля достаточной длины. Рядом с файлом секретного ключа будет создан файл с публичным ключом, отличающийся от него расширением .pub.

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

 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDFsStlpvJs9a+/R+B5YKPkTm0KmTOJ1YSBjne+iO1NQ My personal key

Сначала идёт тип ключа, далее идёт открытый ключ и, далее, комментарий. Также эти строки могут содержать дополнительные опции подключения.

Также утилита ssh-keygen позволяет посмотреть отпечаток ключа сервера. Когда вы впервые подключаетесь к серверу SSH, то клиентское приложение показывает вам отпечаток ключа сервера, и вам следует сравнить его с реальным отпечатком ключа сервера, во избежание атаки типа MITM. Администратор сервера может посмотреть отпечаток ключа командой вида:

 ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub

В этой команде первый ключ -l означает просмотр отпечатка, после ключа -f идёт путь к открытому ключу, они по умолчанию имеют имена вида /etc/ssh/ssh_host_TYPE_key.pub, где вместо TYPE стоит тип ключа (rsa, ed25519 и т.д.).

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

 ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub -E md5

ssh-agent и ssh-add

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

ssh-agent

Утилита ssh-agent служит для сохранения открытого ключа в расшифрованном виде между подключениями. Данное приложение запускается не совсем обычным образом (в примере предполагается использование командной оболочки bash):

 eval $(ssh-agent -s)

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

 SSH_AUTH_SOCK=/tmp/ssh-43fFGNj1mMxC/agent.284145; export SSH_AUTH_SOCK;
 SSH_AGENT_PID=284146; export SSH_AGENT_PID;
 echo Agent pid 284146;

А при помощи конструкции eval $(...) полученный код выполняется в контексте текущей командной оболочки. Конечным результатом является установка в текущем сеансе переменных SSH_AGENT_PID и SSH_AUTH_SOCK, содержащих данные для подключения к ssh-agent. Эти данные будут нужны утилите ssh-add.

ssh-add

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

 ssh-add ~/.ssh/id_ed25519

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

scp

Утилита scp служит для копирования файлов по защищённому протоколу SCP между системами. Пример использования:

 scp -p file.txt user@example.com:/home/user/tmp

В данном примере копируется файл file.txt на сервер example.com, в каталог /home/user/tmp, подключаясь к серверу под именем пользователя user. Ключ -p означает, что у скопированных файлов время модификации и доступа будут совпадать с исходными (иначе они будут соответствовать времени копирования).

 scp -pr directory user@example.com:/home/user/tmp

В данном примере копируется каталог directory со всем его содержимым (за что отвечает ключ -r, означающий рекурсивное копирование).

Обратите внимание, что результат копирования будет разный в зависимости от того, существует последний элемент пути назначения или нет. Допустим, в последнем примере в каталоге directory находится файл file.txt. И, если бы на сервере в каталоге /home/user не было бы каталога tmp, то он был бы создан, а содержимое directory было бы скопировано в него, то есть, на сервере появился бы файл /home/user/tmp/file.txt, или это можно сформулировать так, что каталог directory был бы скопирован на сервер под новым именем tmp. А если бы каталог tmp там уже существовал, то внутрь него был бы скопирован каталог directory вместе со всем содержимым, то есть, появился бы файл /home/user/tmp/directory/file.txt.

sftp

Утилита sftp предназначена для копирования файлов между системами по защищённому протоколу. Работа с нею осуществляется иначе, чем с утилитой scp — пользователь подключается к удалённому серверу, может просматривать содержимое его каталогов и вводить команды для копирования файлов на сервер или с него.

Основные вопросы безопасности при использовании OpenSSH

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

  • не проверить отпечаток ключа сервера (это создаст условия для атаки типа MITM);
  • не проверить подлинность открытого ключа, отправленного, в частности, по электронной почте (злоумышленник может отправить свой ключ под видом ключа легального пользователя);
  • отправить закрытый ключ вместо открытого (администратор системы, которому по ошибке переслали закрытый ключ, может получить техническую возможность подключения к другим системам от имени данного пользователя);
  • не использовать пароль для закрытого ключа (взлом или заражение системы могут привести к утечке ключа и заражению множества других систем);
  • использовать ключ устаревшего типа или недостаточной длины (в OpenSSH периодически добавляется поддержка ключей новых типов, при этом использование старых по умолчанию отключается);
  • использовать слабый пароль (если вы посмотрите логи системы, подключённой к Интернет, то скорее всего увидите там множественные попытки подбора пароля для SSH).

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