目次
設定にSSH秘密鍵ファイルを追加した後、サービスモードやTUNを有効にするとコアの起動に失敗する。この変化が起きたら、最初に出たファイルパスのエラーを確認します。起動失敗をすべて権限不足と決めつけないでください。
SSH秘密鍵ファイルを指定すると、なぜコアが起動しないのか
公式issue #8445では、Windows 11のClash Verge Rev v2.5.8でSSH秘密鍵ファイルを使うとTUNを有効にできない事例が報告されています。相対パスではファイルが見つからず、絶対パスに変えるとSAFE_PATHSの制限にかかります。後続のcode 1006は、コアが準備できなかったことを示す上位で通知されるエラーです。
公式v2.5.10には、サービスモードでのSSH秘密鍵ファイルの修正が含まれています。この記事が扱うのは、ファイルをサービスのコアに渡す際の問題です。あらゆるTUN障害の解決や、Windowsの単一報告を基にした三つのシステムでの動作確認を意味するものではありません。
最初のエラーから対象の問題か判断する
| 実際の症状 | 次に確認すること |
|---|---|
| 設定にtype: sshとファイルを指定したprivate-keyがあり、その後パスやSAFE_PATHSのエラーが出る | ファイルの場所とアプリの修正を確認する |
| code 1006やIPC未準備のエラーだけで、秘密鍵に関するエラーがない | さらに前のコアログを残し、実際の原因を特定する |
| コアは起動するが、SSH認証やホスト鍵の検証に失敗する | SSH認証情報、サーバー、ホスト鍵を確認する。起動の修正とは分けて対処する |
| 設定でSSH秘密鍵ファイルを使っていない | 実際に出ているサービス、ネットワーク、設定のエラーを調べる |
相対パスの基準が変わると、絶対パスにしても解決しないことがある
Mihomoのprivate-keyには、秘密鍵の内容またはファイルパスを指定できます。この記事ではファイルパスだけを扱います。パスのエラーを避けるために、秘密鍵全体をサブスクリプション、公開設定、問い合わせ用のスクリーンショットに貼り付けないでください。
サービスのコアは独立した実行ディレクトリを使うため、アプリのディレクトリ内の相対パスをそのまま読めるとは限りません。v2.5.10では、条件を満たすローカルの秘密鍵をサービスの実行ディレクトリに一時配置し、サービスに渡す設定も書き換えます。利用者がサービスのディレクトリへ手作業でファイルを追加する必要はありません。
この修正にも条件があります。ファイルが実在し、パスを解決した後の実際の場所がアプリの実行用設定ファイルの親ディレクトリ内にある必要があります。相対パスはこの親ディレクトリを基準にします。絶対パスも同じ制限を受けるため、ディスク上の任意のファイルを読めるわけではありません。
処理対象は、トップレベルのproxiesとproxy-providersのpayloadにあるSSH項目です。リモートのproviderファイル内の任意のノードまで再帰的に調べる保証はありません。インラインの秘密鍵、WindowsのUNCパスやデバイスパスも、今回の通常のローカルファイルを一時配置する処理の対象外です。
元の設定と秘密鍵を残し、ファイルの場所を確認する
まず現在のProfile、カスタム上書き、元のプロキシモードを保存し、復元できる外部コピーを用意します。秘密鍵ファイルの原本も別に残してください。設定のZIPだけでは、外部のSSHファイルが含まれているとは限りません。バックアップは自分で管理できる場所に保管し、問い合わせには機密情報を除いた別のコピーを使います。
「設定 → Verge詳細設定 → 設定ディレクトリを開く」を開きます。ここがアプリの設定ディレクトリで、実行用設定ファイルの親ディレクトリでもあります。相対パスの基準をprofilesサブディレクトリにしたり、サービスの実行ディレクトリへ手作業でファイルを追加したりしないでください。
開いたディレクトリ内のsshサブディレクトリに、信頼できる秘密鍵のコピーをアクセス制限付きで置きます。自分で管理するProfileまたは永続的な上書きにprivate-key: 'ssh/id_ed25519'と記述し、実際のファイル名に合わせてください。元の秘密鍵は動かさず、元に戻せるように残します。
対象が通常のファイルで、アプリから読み取れること、ディレクトリ外を指すシンボリックリンクではないことを確認します。拡張子を変えて不足したファイルの代わりにしないでください。再生成される実行用YAMLを直接編集せず、秘密鍵を公開リポジトリに追加したり、元のファイル保護を解除したりしないでください。
更新前に記録すること
- アプリの完全なバージョン、オペレーティングシステム、現在のサービスモードとTUNの使用状況。
- 実際の実行用設定ファイルの親ディレクトリ、private-keyの指定方法、ファイルの場所。公開の問い合わせでは、ユーザー名や機密性のあるパスを伏せる。
- 最初のファイルまたは安全なパスに関するエラーと、その後のコア起動エラーが出た順序。
- 元の設定、秘密鍵の原本、それまで使えていたノードと通信をプロキシに渡す設定。
v2.5.10をインストールし、サービスに必要なファイルをアプリで準備し直す
修正箇所は、Clash Verge Revアプリがサービスの実行用リソースを準備するコードです。Mihomoだけの更新、サブスクリプションの更新、TUNの繰り返し切り替えでは、アプリ全体の更新の代わりになりません。同じ修正が含まれる根拠のある後続の正式版を使っている場合、この記事のためにv2.5.10へ戻す必要もありません。
参考資料にある公式v2.5.10 Releaseから、自分のシステム、チップのアーキテクチャ、従来のインストール方法に合うものへ更新します。今回、当サイトで配信するインストールパッケージは置き換えていません。古いパッケージをダウンロードできても、この修正が含まれる証拠にはなりません。
従来のインストール方法で更新して開き直す
作業を保存して通常の手順でアプリを終了する
通信を中断できるタイミングで元の設定を記録し、アプリでサポートされる方法で現在の通信の取り込みを停止してから、トレイで完全に終了します。設定と秘密鍵は残し、データディレクトリを削除したり、サービス内部のファイルを手作業で置き換えたりしないでください。
公式アプリの更新を完了する
システムとアーキテクチャに合う正式なインストールパッケージを使い、従来のインストール方法を維持します。インストールや署名の検証に失敗したら、具体的なエラーから対処し、システムの安全性チェックを無効にして続行しないでください。
開き直し、実際に動いているバージョンを確認する
実際のアプリがv2.5.10、または同じ修正が含まれる根拠のある後続の正式版で、元のProfileと永続的な上書きが残っていることを確認します。パスの変更は元の設定に保存して再度有効にし、最終的な設定のSSH項目も確認してください。
従来の用途に合わせてサービスのコアとTUNを起動する
必要な通信の取り込み方を維持し、再起動後に最初のログを確認します。DNS、ノードの認証情報、複数のスイッチを同時に変えて、結果を比較できなくしないでください。
コアの起動後は、元のSSHノードで実際に通信できるか確認する
コアの準備ができ、秘密鍵のパスやSAFE_PATHSのエラーで終了しなくなったことを確認してから、必要な元のSSHノードを選び、新たに実際のリクエストを送ります。クライアントの「接続」画面で今回のリクエストが想定したSSHの出口を通ったか確認し、実際の処理が成功したことも確かめます。
コアが起動しても、SSHへのログインが成功したとは限りません。遅延の数値やTUNスイッチの点灯だけでは、認証、ホスト鍵の検証、実際の通信が正常だと証明できません。その後に認証エラーが出たら、SSHサーバーと認証情報を調べます。host-keyを削除して検証を解除しないでください。
修正後の確認項目
- 実際のアプリのバージョンに、サービスモードの秘密鍵を一時配置する修正が含まれ、最終的な設定で想定したSSH項目を使っている。
- 秘密鍵が許可されたアプリ設定の範囲内に実在し、再起動後も読み取れる。
- サービスのコアが準備でき、このファイルパスのエラーでは終了しない。
- 新しい接続が想定したSSHノードを使い、実際のリクエストが完了して、元の業務も利用できる。
- 日常のモード、元の選択、必要な通信の取り込み設定に戻してから、もう一度結果を確認する。
当サイトは、実際のクライアントでこの問題のインストール検証や再現を行っていません。この記事は、公式のユーザー報告、正式リリース、固定したソースコード、SSH設定ドキュメントに基づいています。ウェブサイトの翻訳、ソースレベル、ブラウザーのチェックは、利用する端末での実際の接続確認の代わりにはなりません。
直らない場合は最初のエラーから戻し、ファイルの保護を維持する
private key is unavailable below the config rootと表示される
実行用設定ファイルの親ディレクトリ、ファイルの有無、パス解決後の実際の場所、アプリの読み取り権限を確認し直します。ディレクトリ外のファイル、シンボリックリンクによる範囲外への参照、リモートパスは今回の自動配置の保証対象ではありません。SAFE_PATHSをむやみに変更しないでください。
ファイルのエラーは消えたが、code 1006や別の理由で終了する
新たに出た最初のコアエラーと実際のバージョンを保存し、その内容から調べます。最後のIPCエラーだけを根拠にシステムサービスを再インストールしないでください。
更新後にアプリや元の設定が使えなくなった
変更を重ねず、現在の状態を保存します。まず自分で動作を確認済みの設定とノードに戻してください。アプリを戻す必要がある場合は、プロジェクトがサポートする方法で対応するバックアップを使い、手元に一つしかないデータディレクトリを新旧のプログラムで共用しないようにします。
すぐに更新できない場合は、動作を確認済みのSSH以外のノードや元の設定に戻し、作業を再開できます。ただし、古いサービスモードの秘密鍵の問題が修正されたわけではありません。制限を避けるためにディスク全体を読み取り可能にしたり、すべての利用者に書き込み権限を与えたり、鍵をサービスのディレクトリに移すことを恒久的な対処にしたりしないでください。
問い合わせには、オペレーティングシステム、アプリの完全なバージョン、サービスモード、private-keyにファイルと内容のどちらを指定したか、機密情報を除いたディレクトリの関係、最初のエラーを添えます。秘密鍵、パスワード、サブスクリプションのトークン、完全な設定パッケージは送らないでください。
参考資料
- Clash Verge Revv2.5.10正式リリース:サービスモードのSSH秘密鍵ファイル修正
- Clash Verge Revユーザー報告 #8445:SSH秘密鍵ファイルでTUNが有効にならない
- Clash Verge Rev修正コミットa038e01:サービスのコア用にSSH秘密鍵ファイルを準備
- Clash Verge Revv2.5.10の固定ソース:秘密鍵の一時配置と許可ディレクトリの確認
- MihomoMihomo公式SSH設定:private-keyとホスト鍵のフィールド
- Clash Verge Revv2.5.10の設定画面:アプリの設定ディレクトリを開く
- Clash Verge Revv2.5.10のディレクトリ定義:アプリ設定とprofilesを分けて保存
