OpenSSH 10.0 リリース準備中 / Call for testing: OpenSSH 10.0

OpenSSH 10.0 がリリース準備中です.

Call for testing: OpenSSH 10.0

# https://lists.mindrot.org/pipermail/openssh-unix-dev/2025-April/041855.html

Potentially-incompatible changes
--------------------------------

潜在的に非互換な変更

 * This release removes support for the weak DSA signature
   algorithm, completing the deprecation process that began in
   2015 (when DSA was disabled by default) and repeatedly warned
   over the the last 12 months.

   このリリースでは、弱いDSA署名アルゴリズムのサポートが削除されます。
   これは、2015年にデフォルトで無効化され、
   過去12か月間にわたり繰り返し警告されてきた非推奨プロセスの完了を意味する。

 * This release has the version number 10.0 and announces itself
   as "SSH-2.0-OpenSSH_10.0". Software that naively matches
   versions using patterns like "OpenSSH_1*" may be confused by
   this.

   このリリースのバージョン番号は 10.0 であり、
   自身を "SSH-2.0-OpenSSH_10.0" として通知する。
   バージョンを "OpenSSH_1*" のようなパターンで
   単純に照合しているソフトウェアでは、
   問題が発生するかもしれない。

 * sshd(8): this release removes the code responsible for the
   user authentication phase of the protocol from the per-
   connection sshd-session binary to a new sshd-auth binary.
   Splitting this code into a separate binary ensures that the
   crucial pre-authentication attack surface has an entirely
   disjoint address space from the code used for the rest of the
   connection. It also yields a small runtime memory saving as the
   authentication code will be unloaded after the authentication
   phase completes. This change should be largely invisible to
   users, though some log messages may now come from "sshd-auth"
   instead of "sshd-session". Downstream distributors of OpenSSH
   will need to package the sshd-auth binary.

   sshd(8): このリリースでは、プロトコルのユーザー認証フェーズを処理するコードを、
   接続ごとの sshd-session バイナリから、新しい sshd-auth バイナリに移動する。
   このコードを別のバイナリに分離することで、重大な認証前の攻撃対象領域が
   接続の残りで利用されるコードから完全に別のアドレス空間を持つことを保証する。
   また、認証フェーズが完了したあとで認証コードがアンロードされるので、
   ランタイムのメモリ使用量も若干削減される。
   この変更はほとんどのユーザーにとっては目に見えませんが、
   一部のログメッセージが "sshd-session" ではなく "sshd-auth" から出力される場合がある。
   OpenSSH をパッケージ化する下流のディストリビューターは、sshd-auth バイナリを含める必要がある。

 * sshd(8): this release disables finite field (a.k.a modp)
   Diffie-Hellman key exchange in sshd by default. Specifically,
   this removes the "diffie-hellman-group*" and
   "diffie-hellman-group-exchange-*" methods from the default
   KEXAlgorithms list. The client is unchanged and continues to
   support these methods by default. Finite field Diffie Hellman
   is slow and computationally expensive for the same security
   level as Elliptic Curve DH or PQ key agreement while offering
   no redeeming advantages. ECDH has been specified for the SSH
   protocol for 15 years and some form of ECDH has been the default
   key exchange in OpenSSH for the last 14 years.

   sshd(8): このリリースでは、有限体(modp)Diffie-Hellman 鍵交換がデフォルトで無効化される。
   具体的には、diffie-hellman-group* および diffie-hellman-group-exchange-*
   のメソッドがデフォルトの KEXAlgorithms リストから削除される。
   クライアントは変更されず、これらのメソッドをデフォルトで引き続きサポートする。
   有限体 Diffie-Hellman は、同じセキュリティレベルの Elliptic Curve DH や PQ 鍵合意と比較して、
   速度が遅く、計算コストが高い一方で、特に優れた利点を持たない。
   ECDH は SSH プロトコルにおいて 15 年前から標準化されており、
   ECDH のいくつかの形式が OpenSSH では 14 年間デフォルトの鍵交換アルゴリズムとして採用されている。

 * sshd(8): this release removes the implicit fallback to compiled-
   in groups for Diffie-Hellman Group Exchange KEX when the moduli
   file exists but does not contain moduli within the client-
   requested range.  The fallback behaviour remains for the case
   where the moduli file does not exist at all. This allows
   administrators more explicit control over which DH groups will
   be selected, but can lead to connection failures if the moduli
   file is edited incorrectly. bz#2793

   sshd(8): このリリースで moduli ファイルが存在するが、クライアントが要求した範囲の
   moduli が含まれていない場合に、コンパイル済みのグループへフォールバックする機能が削除される。
   moduli ファイルがまったく存在しない場合には、フォールバック動作が維持される。
   これにより管理者は使用する Diffie-Hellman グループをより明確に制御できるが、
   moduli ファイルの編集を誤ると接続エラーの原因となる場合がある。bz#2793

 * sftp(1) and scp(1) will now explicitly not create a ControlMaster mux
   connection, since doing so would potentially create one with
   options more restrictive than those specified in the config file.
   This could lead to later confusion, particularly when used with
   ControlMaster=auto.  sftp(1) and scp(1) can still use a mux connection,
   so ssh(1) can be used to establish one, after which they can use it
   as per usual.

   sftp(1)とscp(1)は、 ControlMaster マルチプレクサ接続の作成が明示的に作成できなくなる。
   設定ファイルで指定されたものよりも制限の厳しいオプションでセッションが作成される可能性があるためだ。
   これは、特に ControlMaster=auto が設定されている場合、 後で混乱を招く可能性がある。
   sftp(1) と scp(1) は マルチプレクサ接続を引き続き利用できる。
   つまり ssh(1) がマルチプレクサ接続を確立した後で、 sftp(1) と scp(1) はそれを
   通常通り利用できる。

Changes since OpenSSH 9.9
=========================

OpenSSH 9.9 からの変更点

New features
------------

新機能

 * ssh(1): the hybrid post-quantum algorithm mlkem768x25519-sha256
   is now used by default for key agreement. This algorithm is
   considered to be safe against attack by quantum computers,
   is guaranteed to be no less strong than the popular
   curve25519-sha256 algorithm, has been standardised by NIST
   and is considerably faster than the previous default.

   ssh(1): ポスト量子ハイブリッドアルゴリズム mlkem768x25519-sha256 が
   鍵合意にデフォルトで利用される。このアルゴリズムは量子コンピュータによる
   攻撃に対して安全と考えられ、curve25519-sha256 よりも強度が低くなることが保証されていて、
   NIST によって標準化されており、以前のデフォルトよりも高速です。

 * ssh(1): prefer AES-GCM to AES-CTR mode when selecting a cipher
   for the connection. The default cipher preference list is now
   Chacha20/Poly1305, AES-GCM (128/256) followed by AES-CTR
   (128/192/256).

   ssh(1): 接続に使用する暗号方式として、AES-CTR よりも AES-GCM を優先する。
   デフォルトの暗号優先リストは Chacha20/Poly1305、AES-GCM (128/256)、
   AES-CTR (128/192/256) となる。

 * ssh(1): add %-token and environment variable expansion to the
   ssh_config SetEnv directive.

   ssh(1): ssh_config の SetEnv 設定項目で
   % トークンと環境変数の展開が追加される。

 * ssh(1): allow %-token and environment variable expansion in
   the ssh_config User directive, with the exception of %r and %C
   which would be self-referential. bz#3477

   ssh(1): ssh_config の User ディレクティブで % トークンと環境変数の展開が可能になる。
   ただし、自己参照となる %r および %C は除外される。bz#3477

 * ssh(1), sshd(8): add "Match version" support to ssh_config and
   sshd_config. Allows matching on the local version of OpenSSH,
   e.g. "Match version OpenSSH_10.*".

   ssh(1)、sshd(8): "Match version" のサポートが ssh_config および
   sshd_config に追加される。OpenSSH のローカルなバージョンに対して条件を設定できる。
   例えば "Match version OpenSSH_10.*"。

 * ssh(1): add support for "Match sessiontype" to ssh_config.
   Allows matching on the type of session initially requested,
   either "shell" for interactive sessions, "exec" for command
   execution sessions, "subsystem" for subsystem requests, such as
   sftp, or "none" for transport/forwarding-only sessions.

   ssh(1): "Match sessiontype" のサポートを追加する。
   最初にリクエストされたセッションのタイプに対して条件を設定できる。
   タイプには、インタラクティブなセッションに対する
   "shell"、 コマンド実行セッションに対する "exec", sftp のようなサブシステム要求
   に対する "subsystem"、トランスポート/転送のみのセッションに対する "none"
   がある。

 * ssh(1): add support for "Match command ..." support to
   ssh_config, allowing matching on the remote command as specified
   on the command-line.

   ssh(1): ssh_config で "Match command ..." をサポートする。
   コマンドラインで指定されたリモートコマンドに基づいて条件を設定できる。

 * ssh(1): allow 'Match tagged ""' and 'Match command ""' to match
   empty tag and command values respectively.

   ssh(1): 'Match tagged ""' および 'Match command ""' を許可する。
   それぞれ空のタグおよび空のコマンド値にマッチする。

 * sshd(8): allow glob(3) patterns to be used in sshd_config
   AuthorizedKeysFile and AuthorizedPrincipalsFile directives.
   bz2755

   sshd(8): sshd_config の AuthorizedKeysFile および AuthorizedPrincipalsFile
   設定項目で glob(3) パターンの使用を許可する。bz2755

 * sshd(1): support the VersionAddendum in the client, mirroring
   the option of the same name in the server; bz2745

   sshd(1): クライアントに VersionAddendum のサポートを追加し、
   サーバーの同名のオプションと対応させる。bz2745

 * ssh-agent(1): the agent will now delete all loaded keys when
   signaled with SIGUSR1. This allows deletion of keys without
   having access to $SSH_AUTH_SOCK.

   ssh-agent(1): SIGUSR1 シグナルを受信した際に、エージェントがロードされているすべての鍵を削除する。
   これにより $SSH_AUTH_SOCK へのアクセスなしに鍵を削除できる。

 * Portable OpenSSH, ssh-agent(1): support systemd-style socket
   activation in ssh-agent using the LISTEN_PID/LISTEN_FDS
   mechanism. Activated when these environment variables are set,
   the agent is started with the -d or -D option and no socket path
   is set. GHPR502

   移植版 OpenSSH, ssh-agent(1): ssh-agent で LISTEN_PID/LISTEN_FDS メカニズムを使用する 
   systemd スタイルのソケットアクティベーションをサポートする。
   これらの環境変数が設定され、エージェントが -d または -D オプション付きで起動され、
   ソケットパスが設定されていない場合に有効となる。GHPR502

 * ssh-keygen(1): support FIDO tokens that return no attestation
   data, e.g. recent WinHello. GHPR542

   ssh-keygen(1): FIDO トークンが証明データを返さない場合のサポートを追加する。
   例えば最近の WinHello。GHPR542

 * ssh-agent(1): add a "-Owebsafe-allow=..." option to allow the
   default FIDO application ID allow-list to be overridden.

   ssh-agent(1): "-Owebsafe-allow=..." オプションを追加する。
   デフォルトの FIDO アプリケーション ID の許可リストを上書きできる。

 * Add a work-in-progress tool to verify FIDO attestation blobs
   that ssh-keygen can optionally write when enrolling FIDO keys.
   This tool is available under regress/misc/ssh-verify-attestation
   for experimentation but is not installed by "make install".

   ssh-keygen で FIDO 鍵を登録する際にオプションで書き込める FIDO 証明データの検証を可能にする
   実験的なツールを追加する。このツールは regress/misc/ssh-verify-attestation にあり
   実験目的で利用できるが、"make install" ではインストールされない。

 * ssh-keygen(1): allow "-" as output file for moduli screening.
   GHPR393

   ssh-keygen(1): モジュラススクリーニングの出力ファイルとして "-" を許可する。
   GHPR393

Bugfixes
--------

バグ修正

 * sshd(8): remove assumption that the sshd_config and any configs
   it includes can fit in a (possibly enlarged) socket buffer.
   Previously it was possible to create a sufficiently large
   configuration that could cause sshd to fail to accept any
   connection. sshd(8) will now actively manage sending its config
   to the sshd-session sub-process.

   sshd(8): sshd_config およびそのインクルードされた設定ファイルが
   (拡張された場合でも) ソケットバッファに収まることを前提とする動作を削除する。
   以前は、shd が接続を受け付けられなくできる大きさの設定ファイルを作成
   することができた。
   sshd(8) は 今は sshd-session サブプロセスへの設定の送信を適切に管理する。

 * ssh(1): don't start the ObscureKeystrokeTiming mitigations if
   there has been traffic on a X11 forwarding channel recently.
   Should fix X11 forwarding performance problems when this setting
   is enabled. bz3655

   ssh(1): X11 フォワーディングチャネルで最近トラフィックがあった場合、
   ObscureKeystrokeTiming の緩和策を開始しないようにする。
   これにより、この設定が有効な場合の X11 フォワーディングの
   パフォーマンス問題を修正する。bz3655

 * ssh(1): prohibit the comma character in hostnames accepted, but
   allow an underscore as the first character in a hostname.

   ssh(1): 許可されるホスト名にカンマを含めることを禁止する。
   一方、ホスト名の先頭にアンダースコアを許可する。

 * sftp(1): set high-water when resuming a "put". Prevents bogus
   "server reordered acks" debug message.

   sftp(1): "put" の再開時にハイウォーターを設定する。
   これにより、不正な "server reordered acks" のデバッグメッセージを防ぐ。

 * ssh(1), sshd(8): fix regression in openssh-9.8, which would fail
   to accept "Match criteria=argument" as well as the documented
   "Match criteria argument" syntax in ssh_config and sshd_config.
   bz3739

   ssh(1), sshd(8): openssh-9.8 のリグレッションを修正し、
   ssh_config および sshd_config において "Match criteria=argument" 形式と、
   ドキュメントに記載されている "Match criteria argument" 形式の両方を受け付ける。
   bz3739

 * scp(1), sftp(1): pass "ControlMaster no" to ssh when invoked by
   scp & sftp. This disables implicit session creation by these
   tools when ControlMaster was set to yes/auto by configuration,
   which some users found surprising. This change will not prevent
   scp/sftp from using an existing multiplexing session if one had
   already been created. GHPR557

   scp(1), sftp(1): scp および sftp が ssh を呼び出す際に ControlMaster no を渡す。
   ControlMaster が yes/auto に設定されている場合に、これらのツールが暗黙的にセッションを作成しないようになる。
   この変更は、すでに作成済みの多重化セッションを scp/sftp が使用することは妨げない。GHPR557

 * sftp(1), ssh(1): fix a number possible NULL dereference bugs,
   including Coverity CIDs 405019 and 477813.

   sftp(1), ssh(1): NULL デリファレンスが発生する可能性のあるバグをいくつか修正する。
   Coverity CIDs 405019 および 477813 を含む。

 * sshd(8): fix PerSourcePenalty incorrectly using "crash" penalty
   when LoginGraceTime was exceeded. bz3797

   sshd(8): PerSourcePenalty が LoginGraceTime を超えた場合に誤って 
   "crash" ペナルティを適用する問題を修正する。bz3797

 * sshd(8): fix "Match invalid-user" from incorrectly being
   activated in initial configuration pass when no other predicates
   were present on the match line

   sshd(8): "Match invalid-user" が、他の条件がない場合に最初の設定パスで誤って適用される問題を修正する。

 * sshd(8): fix debug logging of user specific delay. GHPR#552

   sshd(8): ユーザー固有の遅延のデバッグログを修正する。GHPR#552

 * sshd(8): improve debug logging across sub-process boundaries.
   Previously some log messages were lost early in the sshd-auth and
   sshd-session processes' life.

   sshd(8): サブプロセス間でのデバッグログの改善する。
   これにより、sshd-auth および sshd-session の初期に
   いくつかのログメッセージが失われていた問題を解消した。

 * ssh(1): require control-escape character sequences passed via
   the '-e ^x' command-line to be exactly two characters long. Avoids
   one byte out-of-bounds read if ssh is invoked as "ssh -e^ ..."
   GHPR368

   ssh(1): '-e ^x' のようなコマンドラインで渡されるコントロールエスケープ文字列が必ず2文字であることを要求する。
   これにより、"ssh -e^ ..." のような誤った入力による1バイトのバッファオーバーリードを防ぐ。GHPR368

 * ssh(1), sshd(8): prevent integer overflow in x11 port handling.
   These are theoretically possible if the admin misconfigured
   X11DisplayOffset or the user misconfigures their own $DISPLAY,
   but don't happen in normal operation. bz#3730

   ssh(1), sshd(8): x11 ポート処理における整数オーバーフローを防ぐ。
   これは、管理者が X11DisplayOffset を誤設定した場合や、
   ユーザーが $DISPLAY を誤設定した場合に理論的には発生する可能性があるが、
   通常の運用では起こらない。bz#3730

 * ssh-keygen(1): don't mess up ssh-keygen -l output when the file
   contains CR characters; GHPR236 bz3385.

   ssh-keygen(1): CR 文字を含むファイルで ssh-keygen -l
   の出力が乱れる問題を修正する。GHPR236 bz3385

 * sshd(8): add rate limits to logging of connections dropped by
   PerSourcePenalties. Previously these could be noisy in logs.

   sshd(8): PerSourcePenalties によって接続が拒否された際のログ出力に
   レート制限を追加する。これにより、ログが過剰に出力されるのを防ぐ。

 * ssh(1): fix argument of "Compression" directive in ssh -G config
   dump, which regressed in openssh-9.8.

   ssh(1): ssh -G の設定ダンプ時に Compression ディレクティブの引数が正しく出力されない問題を修正する。
   openssh-9.8 でのリグレッション。

 * sshd(8): fix a corner-case triggered by UpdateHostKeys when sshd
   refuses to accept the signature returned by an agent holding host
   keys during the hostkey rotation sub-protocol. This situation
   could occur in situations where a PKCS#11 smartcard that lacked
   support for particular signature algorithms was used to store
   host keys.

   sshd(8): UpdateHostKeys の際に、ホストキーのローテーション中にエージェントが返した署名を 
   sshd が拒否するコーナーケースを修正する。
   この問題は、特定の署名アルゴリズムをサポートしない
   PKCS#11 スマートカードをホストキーの保存に使用していた場合に発生する可能性があった。

 * ssh-keygen(1): when using RSA keys to sign messages with
   "ssh-keygen -Y", select the signature algorithm based on the
   requested hash algorithm ("-Ohashalg=xxx"). This allows using
   something other than the default of rsa-sha2-512, which may not
   be supported on all signing backends, e.g. some smartcards only
   support SHA256.

   ssh-keygen(1): "ssh-keygen -Y" で RSA 鍵を使用してメッセージに署名する際、
   要求されたハッシュアルゴリズム ("-Ohashalg=xxx") に基づいて適切な署名アルゴリズムを選択する。
   これにより、デフォルトの rsa-sha2-512 以外のアルゴリズムが選択可能となり、
   一部のスマートカードで SHA256 のみサポートされている場合でも使用できるようになる。

 * ssh(1), sshd(8), ssh-keyscan(1): fix ML-KEM768x25519 KEX on
   big-endian systems.

   ssh(1), sshd(8), ssh-keyscan(1): ビッグエンディアンシステムにおける
   ML-KEM768x25519 鍵交換 (KEX) の問題を修正する。

 * Many regression and interop test improvements.

   多くのリグレッションテストおよび相互運用性テストの改善う。

Portability
-----------

移植性

 * All: add support for AWS-LC (AWS libcrypto). bz3784

   全体: AWS-LC (AWS libcrypto) のサポートを追加する。bz3784

 * sshd(8): add wtmpdb support as a Y2038 safe wtmp replacement.

   sshd(8): wtmpdb のサポートを追加し、wtmp の Y2038 問題を回避できる代替機能を提供する。

 * sshd(8): add support for locking sshd into memory, enabled with
   the --with-linux-memlock-onfault configure flag.

   sshd(8): sshd をメモリ内にロックする機能を追加する。
   この機能は --with-linux-memlock-onfault 構成フラグを有効にすることで利用できる。

 * Add support for building a standalone sk-libfido2 library,
   enabled by --with-security-key-standalone

   sk-libfido2 ライブラリを単体でビルドする機能を追加する。
   この機能は --with-security-key-standalone オプションを有効にすることで利用できる。

 * ssh(1), sshd(8), ssh-keyscan(1): include __builtin_popcount
   replacement function. for compilers that lack it.

   ssh(1), sshd(8), ssh-keyscan(1): __builtin_popcount の代替関数を追加する。
   これにより、該当の組み込み関数をサポートしていないコンパイラでも利用できるようになる。

 * All: Check for and replace le32toh, le64toh, htole64 separately.
   It appears that at least some versions of endian.h in glibc do
   not have the latter two. bz#3794

   全体: le32toh, le64toh, htole64 のチェックと置換を個別に行う。
   一部の glibc の endian.h に le64toh や htole64 が含まれていない場合があるため。
   bz#3794

 * Remove ancient RHL 6.x config in RPM spec.

   RPM スペックから古い RHL 6.x の設定を削除する。