macOS Tahoe 26.3でSSHが壊れた:大文字小文字の区別変更、DSAキー廃止と完全修正ガイド
macOS Tahoe 26.3はSSHのユーザー名処理を大文字小文字区別に静かに変更し、ssh-dssキーを無効化しました。SSH接続の修正、設定の更新、Ed25519キーへの移行の完全ガイドです。
Appleは2026年2月11日にmacOS Tahoe 26.3をリリースしましたが、数千人の開発者やシステム管理者にとって、SSH接続は即座に壊れました。警告ダイアログはありませんでした。移行アシスタントもありませんでした。これを指摘するリリースノートもありませんでした。ある日は ssh administrator@yourserver が使えたのに、翌日には Connection closed by 10.10.83.28 port 22 になっていました。レガシーインフラへの認証にDSAキーを使用していた場合、それらは完全に機能しなくなりました。このガイドでは、何が変わったか、なぜそうなったか、そして対話的セッションから自動化CI/CDパイプラインまで、すべての影響を受けるワークフローを修正する方法を詳しく説明します。
主要なポイント
- macOS Tahoe 26.3は大文字小文字を区別するSSHユーザー名を強制します。
Administratorの代わりにadministratorと入力すると、パスワードプロンプトなしに接続が即座に閉じられます。 - ssh-dss(DSA)キーは永久に削除されました。 Tahoe 26.3に同梱されたOpenSSH 10.0は、DSAサポートをコンパイル時に完全に削除しました。再有効化する設定フラグはありません。
mlkem768x25519-sha256またはsntrup761x25519-sha512をサポートしないサーバーに接続すると、ポスト量子鍵交換の警告が表示されるようになりました。- Ed25519がすべての新しいSSHキーの推奨タイプです。 RSAより高速で安全であり、より小さな署名を生成します。
- すべての
~/.ssh/configファイルを監査する必要があります。Userディレクティブの大文字小文字の不一致と、HostKeyAlgorithmsまたはPubkeyAcceptedAlgorithmsでのssh-dssへの参照を確認してください。
目次
- macOS Tahoe 26.3 SSHで何が変わったか
- アップデート後のSSH接続障害の診断
- 大文字小文字の区別変更を理解する
- DSAキー削除を理解する
- ポスト量子鍵交換の警告
- ステップバイステップの修正:大文字小文字の問題
- ステップバイステップの修正:DSAからEd25519への移行
- 完全なSSH設定監査ガイド
- SSHエージェントの変更とKeychain統合
- CI/CDパイプラインと自動化への影響
- リモート開発ワークフローへの影響
- レガシーインフラの回避策
- 2026年のSSHセキュリティベストプラクティス
- よくある質問
- まとめ
macOS Tahoe 26.3 SSHで何が変わったか
macOS Tahoe 26.3はOpenSSH 10.0を搭載しており、日々のSSHワークフローに影響を与える3つの破壊的変更が導入されています。Appleはこれらのいずれもユーザー向けリリースノートで強調しておらず、開発者たちは接続の失敗を通じてそれを発見することになりました。
変更1:大文字小文字を区別するユーザー名マッチング
Tahoe 26.3以前、macOSのSSHクライアントはユーザー名の大文字小文字について寛容でした。ssh administrator@server、ssh Administrator@server、あるいはssh ADMINISTRATOR@serverで接続でき、基盤となるオペレーティングシステムがアカウントを見つけられる限り、リモートサーバーはユーザー名を正しく解決していました。アップデート後、SSHクライアントは接続が完全に確立される前に厳格な大文字小文字マッチングを強制します。大文字小文字がリモートサーバーの期待と一致しない場合、パスワード認証や鍵交換が完了する前に接続が即座に閉じられます。
変更2:DSA(ssh-dss)の完全削除
OpenSSHは2015年のバージョン7.0からDSAを非推奨にしてきました。非推奨化は明確なタイムラインに従いました:
| 日付 | OpenSSHバージョン | DSAの状態 |
|---|---|---|
| 2015 | 7.0 | デフォルト無効、設定で再有効化可能 |
| 2024 | 9.x | コンパイル時オプション、デフォルト有効 |
| 2024年中頃 | 9.x | コンパイル時オプション、デフォルト無効 |
| 2025年4月 | 10.0 | コードベースから完全削除 |
| 2026年2月 | 10.0(macOS Tahoe 26.3) | すべてのmacOSユーザーに配布 |
macOS Tahoe 26.3では、PubkeyAcceptedAlgorithms +ssh-dssの回避策は機能しません。アルゴリズムがバイナリに存在しません。ssh-dssを参照するSSH設定はBad key typesエラーを生成します。
変更3:ポスト量子鍵交換の警告
OpenSSH 10.0は、ポスト量子鍵交換アルゴリズムをサポートしないサーバーに接続する際にトリガーされる警告を導入しました。警告の内容は次のとおりです:
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.
これはハードな失敗ではなく警告ですが、ターミナル出力にノイズを生成し、SSHの出力を解析する自動化スクリプトを壊す可能性があります。
変わらなかったこと
変わらないことも注目する価値があります:
- RSAキーは引き続き機能します(
rsa-sha2-256およびrsa-sha2-512署名アルゴリズムを使用) - ECDSAキーは引き続き機能します(Ed25519が推奨されますが)
- SSHポートフォワーディング、トンネリング、ProxyJumpはすべて同様に機能します
~/.ssh/known_hostsファイル形式は変更されていません
macOSでSSHが初めての方や、ゼロから開発環境を設定する場合は、macOS Tahoe開発者セットアップガイドで完全な初期設定をカバーしています。
アップデート後のSSH接続障害の診断
変更を行う前に、3つの問題のうちどれが接続に影響しているかを確認する必要があります。SSHの詳細出力が主要な診断ツールです。
ステップ1:詳細なSSH出力を有効にする
失敗したSSHコマンドをトリプル詳細フラグで実行して、完全なハンドシェイクネゴシエーションを確認します:
ssh -vvv user@hostname
これにより、接続の各段階を示す詳細な出力が生成されます。次の特定のパターンを探してください:
大文字小文字の区別の失敗パターン:
debug1: Connecting to 10.10.83.28 [10.10.83.28] port 22.
debug1: Connection established.
debug1: identity file /Users/you/.ssh/id_ed25519 type 3
debug3: receive packet: type 7
Connection closed by 10.10.83.28 port 22
主要な指標は、接続が確立された後、認証試行の前に閉じられることです。"Permission denied"メッセージはありません——接続が単に切れます。
DSAキーの失敗パターン:
/Users/you/.ssh/config line 15: Bad key types '+ssh-dss'.
または:
Bad key types '+ssh-rsa,ssh-dss'
このエラーは、SSHクライアントが設定ファイルを解析する際に即座に表示されます。接続試行の前です。
ポスト量子警告パターン:
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.
これは鍵交換中に表示されますが、接続の完了を妨げません。
ステップ2:SSHクライアントのバージョンを確認する
どのOpenSSHバージョンが実行されているか確認します:
ssh -V
macOS Tahoe 26.3での期待される出力:
OpenSSH_10.0p1, LibreSSL 3.3.6
古いバージョンが表示される場合、Homebrew経由でインストールされたOpenSSHが優先されている可能性があります。使用されているバイナリを確認します:
which ssh
システムのSSHは/usr/bin/sshにあります。/opt/homebrew/bin/sshまたは/usr/local/bin/sshが表示される場合は、異なる動作をする可能性のあるHomebrewバージョンを使用しています。
ステップ3:明示的なパラメータでテストする
ユーザー名の大文字小文字とキータイプを明示的に指定して問題を分離します:
# 大文字小文字の区別をテスト——両方の大文字小文字を試す
ssh -vvv Administrator@hostname
ssh -vvv administrator@hostname
# 設定ファイルの干渉なしにテスト
ssh -F /dev/null -vvv user@hostname
# 特定のキーでテスト
ssh -vvv -i ~/.ssh/id_ed25519 user@hostname

ステップ4:エラーの設定ファイルを確認する
設定ファイルを解析して、非推奨のアルゴリズムを参照している行を特定します:
# ssh-dssへの参照を確認
grep -n "ssh-dss" ~/.ssh/config
# システム設定でssh-dssへの参照を確認
grep -n "ssh-dss" /etc/ssh/ssh_config
# 大文字小文字確認のためにすべてのUserディレクティブを確認
grep -n "User " ~/.ssh/config
macOS TahoeでのTerminalの使用についての詳細は、macOS TahoeターミナルガイDを参照してください。
大文字小文字の区別変更を理解する
この変更が接続を壊す理由
ほとんどのUnix系システムでは、ユーザー名はオペレーティングシステムレベルで大文字小文字を区別します。Administratorという名前のユーザーは技術的にはadministratorとは異なるアカウントです。しかし、SSHプロトコル自体(RFC 4252)はユーザー名が「大文字小文字を区別する」と述べていますが、サーバー実装はこれを異なる方法で処理することを選択できると認めています。
macOS Tahoe 26.3以前、macOSのSSHクライアントは寛容でした。ssh administrator@serverと入力すると、クライアントはユーザー名をそのまま送信し、多くのSSHサーバー(特にWindows、macOS、またはネットワークアプライアンス上で実行されているもの)は認証中に大文字小文字を正規化していました。サーバーがadministratorをAdministratorアカウントにマッチングする重い処理を行っていたため、接続は成功していました。
OpenSSH 10.0では、macOSのSSHクライアントはより厳格な認証前チェックを実行するようになりました。サーバーが大文字小文字の不一致を示す早期プロトコルメッセージを返した場合、認証が進む前に接続が終了します。これは次のことを意味します:
- Windowsサーバーへの接続(歴史的に大文字小文字を正規化していた)が壊れる可能性があります
- ネットワークアプライアンスへの接続(ルーター、スイッチ、NASデバイス)が大文字小文字を区別しないユーザー名を使用している場合、壊れる可能性があります
- macOSサーバーへの接続(管理者アカウントが
Administrator(大文字A)だがスクリプトがadministrator(小文字a)を使用している)が壊れます - Linuxサーバーへの接続はLinuxのユーザー名がすでに大文字小文字を区別するため、影響を受ける可能性は低いです
壊れる一般的なシナリオ
シナリオ1:macOSからmacOSへのリモート管理
多くのシステム管理者はリモートMacに次のように接続しています:
ssh [email protected]
しかし、デフォルトのmacOS管理者アカウントは大文字AのAdministratorとして作成されています。これはTahoe 26.3以前は機能していましたが、以降は壊れます。
シナリオ2:ネットワークアプライアンス管理
ルーター、スイッチ、ファイアウォール、NASデバイスへの接続はよく汎用ユーザー名を使用します:
ssh [email protected]
ssh [email protected]
デバイスがユーザー名をAdminまたはROOTとして保存している場合、これらの接続は静かに失敗します。
シナリオ3:SSH設定エイリアス
多くの開発者は、以前は機能していた不正な大文字小文字のSSH設定エントリを持っています:
# ~/.ssh/config - これは今壊れる可能性があります
Host production
HostName prod.example.com
User deploy # サーバーは "Deploy" を期待
IdentityFile ~/.ssh/prod_key
DSAキー削除を理解する
DSAに対するセキュリティの根拠
SSHで実装されたDSA(デジタル署名アルゴリズム)は、固定の1024ビットキー長とハッシュにSHA-1を使用します。この組み合わせは約80ビットの対称セキュリティを提供しますが、現代のセキュリティ標準が推奨する128ビットの最小値をはるかに下回っています。
DSAキーの特定の弱点:
| 特性 | DSA(ssh-dss) | Ed25519 | RSA-4096 |
|---|---|---|---|
| キーサイズ | 1024ビット | 256ビット | 4096ビット |
| ハッシュアルゴリズム | SHA-1 | SHA-512 | SHA-256/512 |
| セキュリティレベル | ~80ビット | ~128ビット | ~128ビット |
| 署名サイズ | 40バイト | 64バイト | 512バイト |
| 署名速度 | 遅い | 速い | 中程度 |
| 検証速度 | 遅い | 速い | 中程度 |
| バイアス脆弱性 | 高い | なし | なし |
DSAは実装上の欠陥に特に脆弱です。署名中に使用される乱数生成器にバイアスがある場合、少数の署名から秘密鍵を回復できます。これは実際の攻撃で悪用されています。
「削除」が実際に意味すること
以前のmacOSバージョンでは、DSAはデフォルトで無効でしたが、設定オプションで再有効化できました:
# これはmacOS Sequoia以前で機能していました
Host legacy-server
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedAlgorithms +ssh-dss
macOS Tahoe 26.3では、SSHバイナリがssh-dssを有効なアルゴリズム識別子として認識しなくなったため、これらの設定行自体がエラーを引き起こします。エラーは次のとおりです:
/Users/you/.ssh/config line 8: Bad key types '+ssh-dss'.
これは次のことを意味します:
- 認証にDSAキーを使用できません(公開鍵ログイン)
- サーバーのDSAホストキーを受け入れられません
- 設定ファイルで
ssh-dssを参照するだけでエラーが発生します ssh-keygenツールはDSAキーを生成できなくなりました
DSAキーを持っているか確認する
移行を進める前に、既存のキーを確認します:
# すべてのSSHキーとそのタイプを一覧表示
for key in ~/.ssh/*.pub; do
echo "=== $key ==="
ssh-keygen -l -f "$key"
done
出力例:
=== /Users/you/.ssh/id_dsa.pub ===
1024 SHA256:abc123... you@mac (DSA) # このキーは置き換えが必要
=== /Users/you/.ssh/id_ed25519.pub ===
256 SHA256:xyz789... you@mac (ED25519) # このキーは問題なし
=== /Users/you/.ssh/id_rsa.pub ===
3072 SHA256:def456... you@mac (RSA) # このキーは問題なし
(DSA)と識別されたキーはすべて置き換える必要があります。見つかった場合は、まだ削除しないでください——どのサーバーがそれを承認しているか特定するために必要です。
ポスト量子鍵交換の警告
警告の意味
OpenSSH 10.0はX25519とハイブリッド化されたML-KEM(以前のCRYSTALS-Kyber)アルゴリズムを使用したポスト量子鍵交換を導入しました。デフォルトの鍵交換アルゴリズムは現在mlkem768x25519-sha256で、sntrup761x25519-sha512がフォールバックです。
これらのアルゴリズムをどちらもサポートしないサーバーに接続すると、OpenSSHは次のように表示します:
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.
「今保存して後で復号化する」攻撃とは、敵対者が今日あなたの暗号化されたSSHトラフィックを記録し、量子コンピュータが古典的な鍵交換アルゴリズムを破る能力を持つようになった将来にそれを復号化できることを意味します。
この警告が表示される場合
- OpenSSH 8.x以前を実行しているサーバーへの接続
- 組み込みSSH実装を持つネットワークアプライアンスへの接続
- 古いSSHデーモンバージョンを持つクラウドインスタンスへの接続
- GitHub、GitLab、またはBitbucketへの接続(PQアルゴリズムをまだサポートしていない可能性があります)
警告を消す
リスクを理解していて警告を抑制したい場合は、~/.ssh/configに次を追加します:
# ポスト量子警告をグローバルに抑制
Host *
WarnWeakCrypto no
または特定のホストのみ:
Host legacy-server
HostName 192.168.1.100
WarnWeakCrypto no
理想的な解決策は、sntrup761x25519-sha512をサポートするOpenSSH 9.0以降、または新しいmlkem768x25519-sha256をサポートするOpenSSH 9.9+にサーバーを更新することです。
ステップバイステップの修正:大文字小文字の問題
修正1:正しいユーザー名の大文字小文字を確認する
まず、リモートシステムの正確なユーザー名を確認します。方法はリモートOSによって異なります:
リモートLinux/macOSサーバーの場合:
# コンソール、物理アクセス、または別のSSHクライアントでまだログインできる場合
grep "your_username" /etc/passwd
# またはidコマンドを使用
id
# 出力例:uid=501(Administrator) gid=20(staff) groups=...
リモートWindowsサーバー(OpenSSH)の場合:
# リモートマシンのPowerShellで
whoami
# 出力:DOMAIN\Administrator
ネットワークアプライアンスの場合:
デバイスのWebマネジメントインターフェースまたはドキュメントで正確なユーザー名形式を確認します。一般的なパターン:
- Cisco IOS:通常小文字(
admin) - Juniper:通常小文字(
root) - Synology NAS:作成時の大文字小文字に従う
- QNAP NAS:作成時の大文字小文字に従う
修正2:SSH設定ファイルを更新する
SSH設定を開いてすべてのUserディレクティブを修正します:
# 設定ファイルを開く
nano ~/.ssh/config
修正前(壊れている):
Host production
HostName prod.example.com
User administrator
IdentityFile ~/.ssh/prod_key
Host nas
HostName nas.local
User admin
Port 22
修正後(修正済み):
Host production
HostName prod.example.com
User Administrator
IdentityFile ~/.ssh/prod_key
Host nas
HostName nas.local
User Admin
Port 22
修正3:シェルエイリアスとスクリプトを更新する
シェル設定でSSHコマンドを検索します:
# bashエイリアスを確認
grep -n "ssh " ~/.bashrc ~/.bash_profile 2>/dev/null
# zshエイリアスを確認
grep -n "ssh " ~/.zshrc ~/.zprofile 2>/dev/null
# カスタムスクリプトのSSHコマンドを確認
grep -rn "ssh " ~/scripts/ ~/bin/ 2>/dev/null
ハードコードされたユーザー名を正しい大文字小文字を使用するように更新します。
修正4:環境変数を更新する
一部のツールはSSHユーザー名に環境変数を使用します:
# SSH関連の環境変数を確認
env | grep -i ssh
env | grep -i user
# 確認すべき一般的な変数
echo $DEPLOY_USER
echo $SSH_USER
echo $REMOTE_USER
修正5:修正を確認する
変更後、各接続を確認します:
# 詳細出力でテスト
ssh -v production
# 期待される出力:認証成功
# debug1: Authentication succeeded (publickey).
ステップバイステップの修正:DSAからEd25519への移行
このセクションでは、DSAキーをEd25519キーに置き換える完全なプロセスを説明します。Terminalコマンドの背景知識が必要な場合は、Macターミナル習得ガイドですべての基礎をカバーしています。

フェーズ1:DSAキーのインベントリ作成
新しいキーを生成する前に、DSAキーが使用されている場所を記録します:
# ステップ1:システム上のすべてのDSAキーを見つける
find ~/.ssh -name "*.pub" -exec grep -l "ssh-dss" {} \;
# ステップ2:各DSAキーについて、どのサーバーがそれを承認しているか確認
# 公開鍵のフィンガープリントに注意する
ssh-keygen -l -f ~/.ssh/id_dsa.pub
# ステップ3:known_hostsでDSAホストキーを確認
grep "ssh-dss" ~/.ssh/known_hosts | awk '{print $1}'
移行チェックリストを作成します:
# 移行追跡ファイルを作成
cat > ~/ssh_migration_checklist.txt << 'EOF'
SSH DSA鍵移行チェックリスト
===============================
日付:$(date)
見つかったDSAキー:
- [ ] ~/.ssh/id_dsa -> 使用場所:_______________
- [ ] ~/.ssh/id_dsa.pub -> 承認済みサーバー:_______________
DSAホストキーを持つサーバー:
- [ ] server1.example.com
- [ ] 192.168.1.100
DSAを使用する自動化/スクリプト:
- [ ] deploy.sh
- [ ] backup-cron.sh
- [ ] CI/CDパイプライン:_______________
EOF
フェーズ2:新しいEd25519キーを生成する
意味のあるコメントで新しいEd25519キーペアを生成します:
# 説明的なコメントでEd25519キーを生成
ssh-keygen -t ed25519 -C "yourname@macbook-2026-02" -f ~/.ssh/id_ed25519
# パスフレーズの入力を求められます——設定してください
# パスフレーズは、マシンが侵害された場合に秘密鍵を保護します
異なる目的に別々のキーが必要な場合(セキュリティの分離のために推奨):
# 仕事用サーバーのキー
ssh-keygen -t ed25519 -C "work-servers-2026" -f ~/.ssh/id_ed25519_work
# 個人プロジェクトのキー
ssh-keygen -t ed25519 -C "personal-2026" -f ~/.ssh/id_ed25519_personal
# CI/CD自動化のキー
ssh-keygen -t ed25519 -C "cicd-automation-2026" -f ~/.ssh/id_ed25519_cicd
生成されたキーを確認します:
# 新しいキーを確認
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 期待される出力:
# 256 SHA256:abcdef123456... yourname@macbook-2026-02 (ED25519)
フェーズ3:新しいキーをサーバーにデプロイする
以前DSAキーを使用していた各サーバーに、新しいEd25519公開鍵をデプロイします:
方法1:ssh-copy-idを使用(まだ認証できる場合)
別の動作する認証方法(パスワード、別のキー)がある場合:
# パスワード認証を使用して新しいキーをデプロイ
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
# またはデプロイ中に認証に動作するキーを指定
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o "IdentityFile=~/.ssh/id_rsa" user@server
方法2:手動デプロイ(ssh-copy-idが利用できない場合)
# 公開鍵の内容をコピー
cat ~/.ssh/id_ed25519.pub | pbcopy
# 動作する方法(パスワード、コンソールなど)でサーバーにSSH
ssh user@server
# リモートサーバーでキーを追加
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ここに公開鍵を貼り付ける" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
方法3:SSHで接続できないサーバーの場合
DSAキーが唯一の認証方法で、もはや機能しない場合:
- サーバーのWebマネジメントコンソールを使用(利用可能な場合)
- 物理コンソールまたはIPMI/iLO/iDRACでアクセス
- まだアクセスできるジャンプホストを使用
- サーバー管理者に連絡
フェーズ4:SSH設定を更新する
SSH設定でDSAキーの参照を置き換えます:
# 修正前
Host old-server
HostName legacy.example.com
User admin
IdentityFile ~/.ssh/id_dsa
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedAlgorithms +ssh-dss
# 修正後
Host old-server
HostName legacy.example.com
User Admin
IdentityFile ~/.ssh/id_ed25519_work
フェーズ5:既知のホストをクリーンアップする
古くなったDSAホストキーエントリを削除します:
# known_hostsでDSAホストキーを持つサーバーを見つける
grep "ssh-dss" ~/.ssh/known_hosts
# 特定のホストエントリを削除(次の接続時にホストキーが再受け入れされます)
ssh-keygen -R hostname_or_ip
# またはすべてのDSAエントリを一度に削除
# まずファイルをバックアップ
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.backup.$(date +%Y%m%d)
# 次にDSAエントリを削除
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts
フェーズ6:すべてが機能することを確認する
各サーバーの接続をテストします:
# 詳細出力で接続をテスト
ssh -v old-server
# 正しいキーが提供されているか確認
# 探すべきもの:debug1: Offering public key: /Users/you/.ssh/id_ed25519_work ED25519
# すべての設定済みホストのフル接続テストを実行
for host in $(grep "^Host " ~/.ssh/config | awk '{print $2}' | grep -v '\*'); do
echo "テスト中:$host"
ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" echo "OK" 2>&1
echo "---"
done
フェーズ7:DSAキーを廃止する
すべてのサーバーが移行され確認されたら:
# 古いDSAキーをアーカイブ(すぐには削除しない)
mkdir -p ~/.ssh/deprecated
mv ~/.ssh/id_dsa ~/.ssh/deprecated/id_dsa.retired.$(date +%Y%m%d)
mv ~/.ssh/id_dsa.pub ~/.ssh/deprecated/id_dsa.pub.retired.$(date +%Y%m%d)
chmod 400 ~/.ssh/deprecated/id_dsa.retired.*
見逃したサーバーを発見した場合に備えて、アーカイブされたキーを少なくとも90日間保管してください。
完全なSSH設定監査ガイド
個別の問題に対処した後、SSH設定の完全な監査を実施します。macOSでSSHを何年も使用していて、複数のmacOSアップグレードにわたって設定エントリが蓄積されている場合、これは特に重要です。
監査ステップ1:非推奨アルゴリズムを確認する
# 非推奨アルゴリズムへの参照を確認
echo "=== ~/.ssh/configを確認 ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1|diffie-hellman-group14-sha1|hmac-sha1-96|hmac-md5)" ~/.ssh/config 2>/dev/null
echo ""
echo "=== /etc/ssh/ssh_configを確認 ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1)" /etc/ssh/ssh_config 2>/dev/null
echo ""
echo "=== /etc/ssh/ssh_config.d/を確認 ==="
grep -rn -E "(ssh-dss|ssh-dsa)" /etc/ssh/ssh_config.d/ 2>/dev/null
監査ステップ2:設定構文を検証する
# 接続せずにSSH設定構文をテスト
ssh -G test-host 2>&1 | head -5
# エラーがある場合、次のように表示されます:
# /Users/you/.ssh/config line X: Bad key types '...'
監査ステップ3:すべてのUserディレクティブを確認する
# すべてのUserディレクティブと適用されるホストを抽出
awk '/^Host /{host=$2} /User /{print host, $0}' ~/.ssh/config
出力を確認し、各ユーザー名の大文字小文字を確認します。
監査ステップ4:ファイルパーミッションを確認する
SSHはファイルパーミッションに厳格です。誤ったパーミッションは無音の失敗を引き起こす可能性があります:
# SSHディレクトリのパーミッションを確認して修正
echo "=== ディレクトリのパーミッション ==="
ls -la ~/.ssh/
echo ""
echo "=== 期待されるパーミッション ==="
echo "~/.ssh/ -> drwx------ (700)"
echo "~/.ssh/config -> -rw------- (600)"
echo "~/.ssh/id_* -> -rw------- (600) 秘密鍵用"
echo "~/.ssh/*.pub -> -rw-r--r-- (644) 公開鍵用"
echo "~/.ssh/authorized_keys -> -rw------- (600)"
echo "~/.ssh/known_hosts -> -rw-r--r-- (644)"
# 必要に応じてパーミッションを修正
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config 2>/dev/null
chmod 600 ~/.ssh/id_* 2>/dev/null
chmod 644 ~/.ssh/*.pub 2>/dev/null
chmod 600 ~/.ssh/authorized_keys 2>/dev/null
監査ステップ5:推奨される最新のSSH設定テンプレート
macOS Tahoe 26.3で機能する完全な最新SSH設定テンプレートを示します:
# ~/.ssh/config
# macOS Tahoe 26.3 / OpenSSH 10.0用に更新
# 最終監査:2026-02-28
# ============================================
# グローバルデフォルト
# ============================================
Host *
# デフォルトでEd25519キーを使用
IdentityFile ~/.ssh/id_ed25519
# 各ホストに明示的に設定されたキーのみ提供
IdentitiesOnly yes
# macOS Keychain統合
UseKeychain yes
AddKeysToAgent yes
# 最新の鍵交換設定
KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256,[email protected]
# 接続の安定性
ServerAliveInterval 60
ServerAliveCountMax 3
# セキュリティ強化
HashKnownHosts yes
StrictHostKeyChecking ask
# ============================================
# 仕事用サーバー
# ============================================
Host prod-web
HostName prod-web.example.com
User Deploy
IdentityFile ~/.ssh/id_ed25519_work
Port 22
Host staging
HostName staging.example.com
User Deploy
IdentityFile ~/.ssh/id_ed25519_work
Port 22
# ============================================
# 個人用サーバー
# ============================================
Host homelab
HostName 192.168.1.100
User admin
IdentityFile ~/.ssh/id_ed25519_personal
# ============================================
# ジャンプホスト設定
# ============================================
Host internal-*
ProxyJump bastion.example.com
User admin
IdentityFile ~/.ssh/id_ed25519_work
Host bastion.example.com
User jump-user
IdentityFile ~/.ssh/id_ed25519_work
ForwardAgent no
SSHエージェントの変更とKeychain統合
macOS Tahoe 26.3は、SSHエージェントがmacOS Keychainとやり取りする方法にも微妙な変更をもたらしています。
Keychain統合
macOS固有のUseKeychainディレクティブはTahoe 26.3でも引き続き機能しますが、その動作は改良されています:
# 新しいEd25519キーをmacOS Keychainに追加
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# キーが追加されたことを確認
ssh-add -l
キーが正常に追加されると、次のように表示されます:
256 SHA256:abcdef123456... yourname@macbook-2026-02 (ED25519)
永続的なキーロード
再起動後もキーの永続性を維持するために、SSH設定にこれらのディレクティブが含まれていることを確認します:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
UseKeychain yesがない場合、毎回再起動後にssh-addを実行する必要があります。
SSHエージェントの確認
# エージェントが実行中か確認
echo $SSH_AUTH_SOCK
# ロードされたキーを一覧表示
ssh-add -l
# キーがロードされていない場合、追加する
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
macOSセキュリティ設定の詳細については、macOS Tahoeセキュリティプライバシーガイドをご覧ください。
CI/CDパイプラインと自動化への影響
macOS Tahoe 26.3のSSH変更は、自動化ワークフローに重大な影響を与えます。CI/CDパイプラインがmacOSランナー(GitHub Actions、GitLab CI、Mac上のJenkins)で実行されている場合、ランナーOSがアップグレードされるとこれらの変更が影響します。
GitHub Actions
macos-latestまたはmacos-15ランナーを使用している場合、SSHバイナリは最終的に更新されます。今すぐワークフローを監査します:
# .github/workflows/deploy.yml
# 修正前(潜在的に壊れている)
- name: Deploy
run: |
ssh administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"
# 修正後(修正済み)
- name: Deploy
run: |
ssh Administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"
デプロイシークレットを確認します:
DEPLOY_USER:大文字小文字がリモートアカウントと一致することを確認SSH_PRIVATE_KEY:DSAキーでないことを確認KNOWN_HOSTS:DSAホストキーエントリがないことを確認
GitLab CI
# .gitlab-ci.yml
deploy:
before_script:
# デプロイ前にキータイプを確認
- ssh-keygen -l -f ~/.ssh/id_deploy
# DSAでないことを確認
- |
if ssh-keygen -l -f ~/.ssh/id_deploy | grep -q "DSA"; then
echo "ERROR:DSAキーが検出されました。移行が必要です。"
exit 1
fi
script:
# ユーザー名に正しい大文字小文字を使用
- ssh -o StrictHostKeyChecking=no Deploy@$DEPLOY_HOST "deploy.sh"
Jenkins
macOSエージェントで実行されているJenkinsパイプラインの場合:
pipeline {
agent { label 'macos' }
stages {
stage('Pre-flight SSH Check') {
steps {
sh '''
# SSHバージョンを確認
ssh -V
# 認証情報のDSAキーを確認
for key in ~/.ssh/*.pub; do
if ssh-keygen -l -f "$key" | grep -q "DSA"; then
echo "WARNING:DSAキーが見つかりました:$key"
exit 1
fi
done
echo "SSHプリフライトチェック合格"
'''
}
}
}
}
Ansible Playbooks
macOSコントロールノードからAnsibleを実行する場合:
# ansible.cfg
[defaults]
# 正しいSSHバイナリを確認
ssh_executable = /usr/bin/ssh
# 特定のSSH引数を強制
[ssh_connection]
ssh_args = -o IdentitiesOnly=yes -o IdentityFile=~/.ssh/id_ed25519_ansible
Ansibleインベントリのユーザー名の大文字小文字を確認します:
# inventory.ini
# 修正前
[webservers]
web1.example.com ansible_user=administrator
# 修正後
[webservers]
web1.example.com ansible_user=Administrator
自動バックアップスクリプト
SSHを使用するcronジョブまたはlaunchdタスクを確認します:
# SSH参照を持つすべてのcronジョブを見つける
crontab -l 2>/dev/null | grep -i ssh
# SSH参照を持つlaunchd plistを見つける
grep -rl "ssh" ~/Library/LaunchAgents/ /Library/LaunchAgents/ /Library/LaunchDaemons/ 2>/dev/null
# rsyncバックアップスクリプトを確認(rsyncはデフォルトでSSHを使用)
grep -rn "rsync.*@" ~/scripts/ ~/bin/ 2>/dev/null
リモート開発ワークフローへの影響
VS Code リモートSSH
Visual Studio CodeのRemote SSH拡張機能は、影響を受ける可能性のある接続設定を保存しています:
# VS Code SSH設定の場所
cat ~/Library/Application\ Support/Code/User/settings.json | grep -A5 "remote.SSH"
# VS CodeのSSH設定参照を確認
grep -n "ssh" ~/Library/Application\ Support/Code/User/settings.json 2>/dev/null
VS CodeのSSHターゲットを、正しいユーザー名の大文字小文字と非DSAキーを使用するように更新します。
JetBrains Gateway / リモート開発
JetBrains IDEはSSH設定を別々に保存します:
# JetBrains SSH設定を確認
find ~/Library/Application\ Support/JetBrains -name "*.xml" -exec grep -l "ssh" {} \; 2>/dev/null
tmuxと持続的セッション
SSH経由でtmuxまたはscreenを使用する場合、再接続スクリプトを更新する必要があります:
# 一般的なtmux再接続エイリアス——ユーザー名の大文字小文字を確認
alias tm='ssh -t Administrator@server "tmux attach || tmux new"'
包括的な開発者環境セットアップについては、macOS Tahoe開発者究極ガイドを参照してください。
レガシーインフラの回避策
一部の環境はすぐには更新できません。ネットワークアプライアンス、組み込みシステム、レガシーサーバーは数年間DSAを必要とする場合があります。最も推奨されるものから最も推奨されないものまで、実用的な回避策を示します。
回避策1:ジャンプホストを使用する(推奨)
DSAをまだサポートするLinuxのバスティオンホストをセットアップし、プロキシとして使用します:
# ~/.ssh/config
Host legacy-device
HostName 192.168.1.1
User admin
ProxyJump bastion
Host bastion
HostName bastion.example.com
User jump
IdentityFile ~/.ssh/id_ed25519
バスティオンホストは古いOpenSSH(またはDSAサポートでコンパイルされたもの)を実行し、レガシーデバイスとのDSAネゴシエーションを処理します。MacはEd25519を使用してバスティオンに認証するだけです。
回避策2:Dockerコンテナを使用する
Dockerコンテナ内で古いOpenSSHクライアントを実行します:
# レガシーSSH用のDockerfileを作成
cat > ~/legacy-ssh/Dockerfile << 'EOF'
FROM alpine:3.18
RUN apk add --no-cache openssh-client
ENTRYPOINT ["ssh"]
EOF
# ビルド
docker build -t legacy-ssh ~/legacy-ssh/
# レガシーデバイスへの接続に使用
docker run --rm -it \
-v ~/.ssh:/root/.ssh:ro \
legacy-ssh \
-o HostKeyAlgorithms=+ssh-dss \
-o PubkeyAcceptedKeyTypes=+ssh-dss \
admin@legacy-device
便利さのためのシェルエイリアスを作成します:
# ~/.zshrcに追加
alias legacy-ssh='docker run --rm -it -v ~/.ssh:/root/.ssh:ro legacy-ssh'
# 使用方法
legacy-ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device
回避策3:Homebrewで古いOpenSSHをインストールする
OpenSSH 9.7p1(DSAサポートを持つ最後のバージョン)をソースからコンパイルできます:
# 依存関係をインストール
brew install openssl@3
# OpenSSH 9.7p1ソースをダウンロード
curl -O https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1
# DSAサポートとカスタムプレフィックスで設定
./configure \
--prefix=$HOME/openssh97 \
--with-ssl-dir=$(brew --prefix openssl@3)
# ビルドしてインストール
make -j$(sysctl -n hw.ncpu)
make install
# 古いSSHバイナリを使用
~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device
レガシー接続のエイリアスを作成します:
# ~/.zshrcに追加
alias ssh-legacy='~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss'
# 使用方法
ssh-legacy admin@old-router
回避策4:Linux仮想マシンを使用する
UTM、Parallels、またはVMware Fusionを使用している場合:
- 軽量なLinux VM(AlpineまたはUbuntu Server)をセットアップ
- MacからVMにSSH接続(Ed25519を使用)
- VMからレガシーデバイスにSSH接続(DSAを使用)
これにより完全な分離が提供され、macOSのSSHインストールを変更する必要がありません。
長期的:デバイス交換の計画
ネットワークアプライアンスが最新のアルゴリズムをサポートしないためにDSAに依存している場合、それらのデバイスはセキュリティの観点からすでに寿命が来ていることを示す明確なシグナルです。交換のタイムラインを計画します:
- ルーター/スイッチ:ほとんどのエンタープライズベンダーは2018年からEd25519をサポートしています
- NASデバイス:Synology、QNAP、TrueNASはすべてEd25519をサポートしています
- レガシーサーバー:OpenSSH 6.5より古いバージョンを実行している場合、システム全体を更新する必要があります
2026年のSSHセキュリティベストプラクティス
macOS Tahoe 26.3の変更を契機に、包括的なSSHセキュリティ改善を実施する良い機会です。
鍵管理のベストプラクティス
1. 別々の役割に別々のキーを使用:
# 仕事インフラ
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work-2026"
# 個人プロジェクト
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "personal-2026"
# CI/CDと自動化
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_automation -C "automation-2026"
# Gitホスティング(GitHub、GitLab)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_git -C "git-2026"
2. 常にパスフレーズを使用:
パスフレーズは保存時に秘密鍵を暗号化します。マシンが侵害された場合、攻撃者はパスフレーズなしにSSHキーを使用できません。macOS Keychain統合と組み合わせれば、パスフレーズを一度だけ入力するだけです。
# キー生成中にプロンプトが表示されたとき:
Enter passphrase (empty for no passphrase): [強力なパスフレーズを入力]
Enter same passphrase again: [確認]
3. キーを毎年ローテーション:
いつ生成されたかわかるように、キーのコメントに年を含めます:
ssh-keygen -t ed25519 -C "you@company-2026-Q1" -f ~/.ssh/id_ed25519_work_2026
年が変わったら新しいキーを生成し、デプロイして古いものを廃止します。
4. 正しいファイルパーミッションを設定:
# 秘密鍵:所有者のみ読み取り
chmod 400 ~/.ssh/id_ed25519*
chmod 600 ~/.ssh/id_ed25519*.pub
# 実際には公開鍵は誰でも読み取れます
chmod 644 ~/.ssh/id_ed25519*.pub
# SSHディレクトリ自体
chmod 700 ~/.ssh
# 設定ファイル
chmod 600 ~/.ssh/config
サーバー側の強化
SSHサーバーを管理している場合は、この機会に強化します:
# /etc/ssh/sshd_config 推奨設定
# パスワード認証を無効(キーのみを使用)
PasswordAuthentication no
# rootログインを無効
PermitRootLogin no
# 特定ユーザーのみを許可
AllowUsers deploy admin
# 最新の鍵交換を使用
KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256
# 最新のホストキーアルゴリズムを使用
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
# 最新の暗号を使用
Ciphers [email protected],[email protected],[email protected]
# 最新のMACを使用
MACs [email protected],[email protected]
# レート制限
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30
sshd_configを変更した後は、切断前に必ずテストします:
# 設定を検証
sudo sshd -t
# エラーがなければsshdを再起動
sudo systemctl restart sshd
# 重要:既存のセッションを開いたまま、新しい接続でテストする
# 既存のセッションを閉じる前に
監視とアラート
SSH認証イベントの監視を設定します:
# 失敗した試行についてauth.logを監視(Linuxサーバー)
tail -f /var/log/auth.log | grep "sshd"
# SSHイベントのmacOSシステムログを監視
log stream --predicate 'process == "sshd"' --level info
よくあるエラーのトラブルシューティング
エラー:"Connection closed by X.X.X.X port 22"
原因: ユーザー名の大文字小文字の不一致。
修正:
# 正しいユーザー名を確認
ssh -vvv user@host 2>&1 | grep "debug1: Sending"
# 逆の大文字小文字を試す
ssh Administrator@host # 'administrator'が失敗した場合
ssh administrator@host # 'Administrator'が失敗した場合
エラー:"Bad key types '+ssh-dss'"
原因: SSH設定が削除されたDSAアルゴリズムを参照しています。
修正:
# 問題のある行を見つけて編集
grep -n "ssh-dss" ~/.ssh/config
# アルゴリズム参照を削除または置き換え
# 修正前:HostKeyAlgorithms +ssh-dss
# 修正後:(行全体を削除するか、最新のアルゴリズムに置き換え)
エラー:"Bad key types '+ssh-rsa,ssh-dss'"
原因: SSH設定にDSAを含む複合アルゴリズムリストがあります。
修正:
# 修正前
HostKeyAlgorithms +ssh-rsa,ssh-dss
PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss
# 修正後(ssh-dssを削除、レガシーRSAに必要な場合はssh-rsaを保持)
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
注:ssh-rsa(SHA-1署名付き)も非推奨です。RSAを使用しなければならない場合はrsa-sha2-256またはrsa-sha2-512を使用してください:
HostKeyAlgorithms rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms rsa-sha2-512,rsa-sha2-256
エラー:"No matching host key type found"
原因: リモートサーバーはDSAホストキーのみを提供しています。
修正: これはサーバー側での対応が必要です。サーバーで新しいホストキーを生成します:
# リモートサーバーで(コンソールアクセスがある場合)
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
sudo systemctl restart sshd
サーバーを更新できない場合は、上記のジャンプホストまたはDockerの回避策を使用してください。
エラー:"WARNING: connection is not using a post-quantum key exchange algorithm"
原因: リモートサーバーはポスト量子鍵交換をサポートしていません。
修正:
# 特定のホストで抑制
# ~/.ssh/configに追加:
Host old-server
WarnWeakCrypto no
# またはグローバルに抑制(推奨しません)
Host *
WarnWeakCrypto no
エラー:"Permission denied (publickey)"
原因: 鍵移行後、新しいキーがサーバーで承認されていません。
修正:
# どのキーが提供されているか確認
ssh -v user@host 2>&1 | grep "Offering public key"
# 正しいキーをデプロイ
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
エラー:"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"
原因: known_hostsからDSAホストキーエントリを削除した後、サーバーが異なるホストキータイプを提供しています。
修正:
# 古いホストキーエントリを削除
ssh-keygen -R hostname
# 再接続して新しいホストキーを受け入れ
ssh user@hostname
# 新しいホストキーのフィンガープリントを確認するよう求められます
広範な背景を理解する
macOS Tahoe 26.3のSSH変更は、業界全体にわたるより大きなトレンドの一部です。この背景を理解することで、それぞれの変更に反応するのではなく、将来の変更に備えることができます。
OpenSSHリリースタイムライン
| バージョン | 日付 | 主な変更 |
|---|---|---|
| 7.0 | 2015 | DSAがデフォルトで無効 |
| 8.2 | 2020 | RSAのSHA-1署名が非推奨 |
| 8.8 | 2022 | RSAのSHA-1署名がデフォルトで無効 |
| 9.0 | 2022 | ポスト量子KEx(sntrup761)がデフォルトで有効 |
| 9.9 | 2024 | ML-KEMポスト量子サポートが追加 |
| 10.0 | 2025 | DSAが完全に削除、ML-KEMがデフォルト |
macOSは歴史的にこれらのリリースから6〜12ヶ月遅れており、DSAの削除が2025年4月からOpenSSH 10.0にあったにもかかわらず、2026年初頭にmacOSユーザーに影響を与えている理由はそのためです。
次に予想されること
OpenSSH開発ロードマップに基づいて:
- SHA-1 RSA署名(
ssh-rsa)はOpenSSH 11.xで完全に削除される可能性があります - NIST曲線を使用したECDSAはEd25519の代わりに非推奨になる可能性があります
- ポスト量子署名(鍵交換だけでなく)が追加されます
- 証明書ベースの認証が生の公開鍵よりもますます推進されます
今すぐ準備します:
- すべてのキーがEd25519であることを確認
- RSAを使用しなければならない場合は
rsa-sha2-256/512に移行 - サーバーでポスト量子鍵交換をテスト
- 組織のSSH証明書インフラを評価
macOS Tahoe 26.3のより広範な更新の詳細については、macOS Tahoe 26.3リリースガイドをご覧ください。
クイックリファレンス:必要なコマンド
このガイドで言及されたすべてのコマンドの統合リファレンスを、タスク別に整理して示します:
診断
# SSHバージョンを確認
ssh -V
# 詳細接続テスト
ssh -vvv user@host
# どのSSHバイナリが実行されているか確認
which ssh
# 設定ファイルなしでテスト
ssh -F /dev/null user@host
# 現在のキータイプを確認
for key in ~/.ssh/*.pub; do
echo "=== $key ==="
ssh-keygen -l -f "$key"
done
キー生成
# Ed25519キーを生成(推奨)
ssh-keygen -t ed25519 -C "description-YYYY" -f ~/.ssh/id_ed25519
# RSAキーを生成(ターゲットがEd25519をサポートしない場合)
ssh-keygen -t rsa -b 4096 -C "description-YYYY" -f ~/.ssh/id_rsa
キーデプロイ
# リモートサーバーにキーをデプロイ
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
# macOS Keychainにキーを追加
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
設定監査
# 設定でDSA参照を見つける
grep -n "ssh-dss" ~/.ssh/config /etc/ssh/ssh_config
# すべてのUserディレクティブを見つける
grep -n "User " ~/.ssh/config
# 設定構文を検証
ssh -G test-host
# パーミッションを修正
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 400 ~/.ssh/id_*
chmod 644 ~/.ssh/*.pub
クリーンアップ
# 古いホストキーを削除
ssh-keygen -R hostname
# known_hostsからすべてのDSAエントリを削除
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts
よくある質問
macOS Tahoe 26.3でOpenSSHをダウングレードしてDSAサポートを復元できますか?
System Integrity Protection(SIP)のため、macOSでシステムのOpenSSHバイナリを置き換えることはできません。ただし、Homebrewを通じて古いバージョンをインストールするか、カスタムの場所にソースからコンパイルすることができます。/usr/bin/sshにあるシステムのsshは常にTahoe 26.3に同梱されたOpenSSH 10.0バージョンになります。ソースからOpenSSH 9.7p1をビルドする詳細については、「レガシーインフラの回避策」セクションを参照してください。
ユーザー名の大文字小文字の区別の変更は永続的なものですか、それともバグですか?
OpenSSH 10.0のリリースノートとプロジェクトの方向性に基づいて、これはSSHプロトコル仕様(ユーザー名を大文字小文字を区別すると定義するRFC 4252)に合わせた意図的な動作のようです。Appleはこれがバグかどうかについてコメントしておらず、元に戻される兆候もありません。これを永続的な動作として扱い、設定を更新してください。
RSAキーも機能しなくなりますか?
SHA-2署名(rsa-sha2-256およびrsa-sha2-512)を持つRSAキーは引き続き機能し、近い将来もサポートされ続けます。ただし、SHA-1署名(ssh-rsa)を持つRSAキーはOpenSSH 8.8からデフォルトで無効になっており、将来のバージョンで完全に削除される可能性があります。RSAキーを使用する場合は、少なくとも3072ビットであり、サーバーがSHA-2署名を受け入れることを確認してください。新しいキーにはEd25519が推奨です。
macOSからWindows ServerへのSSH接続を修正するにはどうすればよいですか?
Windows ServerのOpenSSH実装は歴史的にユーザー名の大文字小文字を区別しませんでした。macOS Tahoe 26.3のアップデート後は、Windowsが認識する正確な大文字小文字を使用する必要があります。ドメインアカウントの場合はDOMAIN\Usernameまたは[email protected]を使用してください。ローカルアカウントの場合はコンピューター管理でアカウント名を確認してください。~/.ssh/configを適切に更新します:
Host windows-server
HostName win.example.com
User DOMAIN\\AdminUser
IdentityFile ~/.ssh/id_ed25519
これはSFTPとSCPにも影響しますか?
はい。sftpとscpはどちらも同じSSHクライアントライブラリを使用しており、同一の大文字小文字の区別の強制とDSAの削除の対象です。システムのSSHバイナリを使用するSFTPクライアント(Cyberduck、Transmit、FileZillaなど)も影響を受けます。独自のSSHライブラリをバンドルしているGUI SFTPクライアント(独自のlibssh2ビルドを持つCyberduckなど)は影響を受けない可能性がありますが、これは特定のアプリケーションによって異なります。
まとめ
macOS Tahoe 26.3は適切な警告なしに確立されたワークフローを壊すSSH変更を配布しました。大文字小文字を区別するユーザー名の強制、完全なDSAの削除、ポスト量子鍵交換の警告はそれぞれ対処が必要ですが、何が変わったかを理解すれば、いずれも簡単に解決できます。
すぐに対処すべき項目:
~/.ssh/configを監査するUserディレクティブの大文字小文字の不一致を確認し、ssh-dssへの参照を削除する- Ed25519キーを生成する 残っているDSAキーを置き換えるため
- 新しいキーをデプロイする インベントリのすべてのサーバーに
- 自動化スクリプトとCI/CDパイプラインを更新する 正しいユーザー名の大文字小文字とキーパスで
- セキュリティポスチャに基づいてポスト量子警告を消すまたは解決する
これらの変更は混乱をもたらしますが、macOS SSHエコシステムをより強固なセキュリティのデフォルトに向けて推進しています。Ed25519はDSAより高速で安全であり、より小さなキーを生成します。大文字小文字を区別するユーザー名はSSHプロトコル仕様に合致しています。ポスト量子鍵交換は将来の脅威から守ります。移行の痛みは現実のものですが、セキュリティの改善は実質的です。
macOS Tahoeで新しい開発環境を設定している場合は、macOS Tahoe開発者セットアップガイドから始めて、最初から正しく設定してください。より広範なセキュリティ設定については、macOS TahoeセキュリティプライバシーガイドでSSHを超えた完全なセキュリティスタックをカバーしています。
