
私が理解したように、sshd(私の場合はopenssh)は通常、鍵で認証を試みる着信接続の公開鍵の指紋/ハッシュを記録できます。
私が探しているのは、着信接続、特に失敗したログインの完全な公開鍵です。それは可能ですか?
それでは、どうすればいいですか?
答え1
明らかに、これはopensshの現在の機能ではありません。
私自身のためにここで見つけることができる関数を書いた。
https://github.com/catskul/openssh-portable/tree/print-public-key
diff --git a/auth2-pubkey.c b/auth2-pubkey.c
index 2fb5950..82cce57 100644
--- a/auth2-pubkey.c
+++ b/auth2-pubkey.c
@@ -122,6 +122,17 @@ userauth_pubkey(struct ssh *ssh)
"(received %d, expected %d)", __func__, key->type, pktype);
goto done;
}
+ if (log_level_get() >= SYSLOG_LEVEL_DEBUG1) {
+ if ((b = sshbuf_new()) == NULL)
+ fatal("%s: sshbuf_new failed", __func__);
+ if ((r = sshkey_format_text(key, b)) != 0)
+ fatal("%s: sshkey_format_text failed: %s", __func__,
+ ssh_err(r));
+ debug("%s: public key of %s: %s", __func__, authctxt->user,
+ sshbuf_ptr(b));
+ sshbuf_free(b);
+ b = NULL;
+ }
if (sshkey_type_plain(key->type) == KEY_RSA &&
(ssh->compat & SSH_BUG_RSASIGMD5) != 0) {
logit("Refusing RSA key because client uses unsafe "
答え2
LogLevel DEBUG2
OpenSSH 8.9(およびその他の下位および上位バージョン)は、で実行されたときに公開鍵を表示します/etc/ssh/sshd_config
。
ただし、OpenSSHはデフォルトでログ行の長さを500文字に制限するため、ほとんどの場合、完全なキーを取得するにはパッチを適用する必要があります。
Ubuntuにインストールするときに使用したパッチは次のとおりです。
diff --git a/log.c b/log.c
index bdc4b6515..09474e23a 100644
--- a/log.c
+++ b/log.c
@@ -325,7 +325,7 @@ log_redirect_stderr_to(const char *logfile)
log_stderr_fd = fd;
}
-#define MSGBUFSIZ 1024
+#define MSGBUFSIZ 8192
void
set_log_handler(log_handler_fn *handler, void *ctx)
@@ -417,7 +417,7 @@ do_log(LogLevel level, int force, const char *suffix, const char *fmt,
closelog_r(&sdata);
#else
openlog(progname, LOG_PID, log_facility);
- syslog(pri, "%.500s", fmtbuf);
+ syslog(pri, "%.8192s", fmtbuf);
closelog();
#endif
}
--
(someusernameが認証ユーザーである)で始まる行全体がdebug2: userauth_pubkey: valid user someusername querying public key
文字列で終わる場合、または文字列で終わる場合は、ログ行が表示されます[preauth]
。 ECC-DSAキーは受け入れ可能なほど短くてもかまいませんが、RSAキーはそうではありません。