現在実行中の 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または他のもの) に接続されているプロセスを確認します。

netstatまたはを使用できますss。実行中のサーバーの完全なコマンド ラインを見つけることができ、これがあればサーバーを識別するのに十分でしょう。あるいは、他のオプションを使用することもできます。

  • それを実行することstringsは本当に最後の行動方針ですが、結果を得ることができます(他の回答が示すように、リモートサーバーによって報告された文字列も確実に見つかります)
  • プロセスが開いているファイル (を参照/proc/$PID/fd) を見つけることができます。そこから構成ファイルまたはログファイルへのリンクが得られる可能性があり、理想的には、ログファイルには、これがどのプロセスであるかを正確に特定するのに十分な情報が含まれています。

または、システムと設定に応じて、たとえば、systemctl list-units現在実行されているものやsshサーバーが何であるかを正確に確認するために使用できます(ユニットファイルを調べると、systemdコマンドラインやその他の情報が表示されます)。

サーバーの外部にいる場合は、他の回答を参照してください。ただし、リモート サーバーから返されたものが真実であるという保証はなく、サーバーは望むとおりに表示することができます。

リモートでのもう 1 つのオプションは、「SSH フィンガープリント」を実行することです。直接見たことはありませんが、存在するはずです。基本的に、さまざまな種類の接続をテストすることで、リモート部分から、主張されている情報以外にもいくつかの情報を特定できます。複数の脆弱性スキャナーにそのような機能があると思います。

答え4

psプロセスのリストとgrepの出力を取得するには を使用することができますsshd
これにより、実行可能バイナリへのパスが取得されます {{ eg/usr/sbin/sshdまたはそれに似たもの }}。次に、このバイナリを で実行して、ヘルプと使用方法の情報を取得
できます。この出力には、-?パッケージの正式名称{{ 例: OpenSSH や Dropbear など }}。

関連情報