Как узнать, какой сервер SSH используется в данный момент — OpenSSH или Dropbear?

Как узнать, какой сервер SSH используется в данный момент — OpenSSH или Dropbear?

Если я зайду в файл /etc/ssh/ssh_config, то увижу "$OpenBSD" в верхней части файла. Однако если я изменю порт по умолчанию на другое значение, это, похоже, не сработает. Коллега сообщил мне, что это потому, что Dropbear — это сервер программного обеспечения здесь, а неOpenSSH.

Есть ли способ убедиться?Я не могу найти ответ в Google.

решение1

Подключитесь к порту SSH (например, 22) и проверьте баннер.

$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6

решение2

Большинство (если не все?) серверов SSH отправляют какую-то строку версии сразу после подключения. В своем небольшом исследовательском проекте я попытался сопоставить версию сервера SSH в большом пространстве IPv4, и то, что я сделал, было в основном nc address port.

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

#!/usr/bin/perl
use warnings;
use strict;

unless ($ARGV[0] && $ARGV[1]) {  die "Usage: ./raw hostname port [timeout]\n" }
my $timeout = '10s';
if ($ARGV[2]) {  $timeout = $ARGV[2] }

my $response = `timeout $timeout nc $ARGV[0] $ARGV[1]`;
print $response;

Тестирование на сервере в моей сети:

./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3

решение3

Если вы находитесь на сервере, посмотрите на процесс, подключенный к sshожидаемому сетевому порту ( 22или что-то еще).

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

  • запуск stringsна нем - это действительно последний вариант действий, но он может дать результаты (вы наверняка обнаружите также строку, которая сообщается сервером удаленно, как показывают другие ответы)
  • вы можете найти открытые файлы процесса (см. /proc/$PID/fd), которые могут содержать ссылку на файл конфигурации или файл журнала, и в идеале файл журнала должен содержать достаточно информации, чтобы точно определить, какой это процесс.

Или, в зависимости от вашей системы и настроек, например, вы можете использовать его, systemctl list-unitsчтобы увидеть, что именно работает в данный момент, и что такое sshсервер (затем, проверив systemdфайл модуля, вы увидите, какая это командная строка, и другую информацию)

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

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

решение4

Вы можете использовать psдля получения списка процессов и grepвывода для sshd.
С этим вы получите путь к исполняемому бинарному файлу {{ eg /usr/sbin/sshdили что-то вроде этого }}.
Затем вы можете выполнить этот двоичный файл с помощью , -?чтобы получить справку и информацию об использовании. Этот вывод будет содержатьОкончательное название пакета{{ например OpenSSH или Dropbear или что-то в этом роде }}.

Связанный контент