如何知道目前運行的 SSH 伺服器是 OpenSSH 還是 Dropbear?

如何知道目前運行的 SSH 伺服器是 OpenSSH 還是 Dropbear?

如果我進入文件/etc/ssh/ssh_config,我可以在文件頂部看到“$OpenBSD”。但是,如果我將預設連接埠更改為不同的值,它似乎不起作用。一位同事告訴我,這是因為 Dropbear 是這裡的軟體伺服器,而不是開放SSH

有辦法確定嗎?我無法透過谷歌搜尋找到答案。

答案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或其他連接埠)的進程。

您可以使用netstatorss來實現這一點。然後,您將能夠找到正在運行的伺服器的完整命令列,這可能足以識別它,或者您可以使用其他選項:

  • 在它上面運行strings實際上是最後一個操作過程,但可以產生結果(您肯定會找到伺服器遠端報告的字串,如其他答案所示)
  • 您可以找到該進程打開的文件(查看/proc/$PID/fd),這可能會產生指向配置文件或日誌文件的鏈接,並且理想情況下,日誌文件將提供足夠的信息來查明這是什麼進程。

或者根據您的系統和設置,例如您可以使用它systemctl list-units來準確查看當前運行的內容以及ssh伺服器是什麼(然後透過檢查systemd單元檔案您將看到它是什麼命令列以及其他資訊)

如果您在伺服器外部,則可以查看其他答案,但不能保證從遠端伺服器返回的結果是真實的,它可以將自己顯示為它想要的任何內容。

遠端的另一個選擇是進行一些“SSH 指紋識別”。我沒有直接看到它,但我確信它存在。基本上,透過測試各種類型的連接,除了它聲稱的資訊之外,我們還可以確定來自遠端部分的一些資訊。我猜多個漏洞掃描器都有類似的東西。

答案4

您可以使用ps來取得進程清單和grep的輸出sshd
這樣,您將獲得可執行二進位檔案的路徑{{例如/usr/sbin/sshd或類似的東西}}。
然後您可以使用以下命令執行該二進位文件-?取得協助和使用資訊。此輸出將包含包的最終名稱{{ 例如 OpenSSH 或 Dropbear 或類似的東西}}。

相關內容