我如何知道当前运行的 SSH 服务器是 OpenSSH 还是 Dropbear?

我如何知道当前运行的 SSH 服务器是 OpenSSH 还是 Dropbear?

如果我进入文件/etc/ssh/ssh_config,我可以在文件顶部看到“$OpenBSD”。但是,如果我将默认端口更改为其他值,它似乎不起作用。一位同事告诉我,这是因为 Dropbear 是这里的软件服务器,而不是OpenSSH

有没有什么办法可以确定?我通过谷歌搜索找不到答案。

答案1

连接到 ssh 端口(例如 22)并检查横幅。

$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6

答案2

大多数(如果不是全部?)SSH 服务器在连接后会立即发送某种版本字符串。在我的一个小型研究项目中,我尝试在大型 IPv4 空间中映射 SSH 服务器版本,我所做的基本上是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或其他位置)。

您可以使用netstatss。然后您将能够找到正在运行的服务器的完整命令行,这可能足以识别它,或者您可以使用其他选项:

  • 在其上运行strings实际上是最后一项行动,但可以产生结果(您肯定还会找到服务器远程报告的字符串,正如其他答案所示)
  • 您可以找到该进程打开的文件(查看/proc/$PID/fd),其中可能产生指向配置文件或日志文件的链接,理想情况下,日志文件将提供足够的信息来确定这是什么进程。

或者取决于您的系统和设置,例如,您可以使用它systemctl list-units来准确查看当前正在运行的内容以及ssh服务器是什么(然后通过检查systemd单元文件,您将看到它是什么命令行以及其他信息)

如果您位于服务器外部,请参见其他答案,但不能保证从远程服务器返回的内容是真实的,它可以将自己显示为任何它想要的内容。

远程的另一种选择是进行“SSH 指纹识别”。我还没有亲眼见过,但我确信它存在。基本上,通过测试各种类型的连接,除了它声称的信息之外,还可以确定远程部分的一些信息。我猜多个漏洞扫描器都有类似的东西。

答案4

您可以使用ps获取进程列表和的grep输出sshd
这样,您将获得可执行二进制文件的路径 {{ eg/usr/sbin/sshd或类似的东西 }}。
然后,您可以使用执行此二进制文件以-?获取帮助和使用信息。此输出将包含软件包的最终名称{{ 例如 OpenSSH 或 Dropbear 或类似的东西 }}。

相关内容