Mihomo SSH ConfigConfigAlias Support
· 阅读需 4 分钟
🔗 プロジェクト情報
- Fork リポジトリ: https://github.com/iuin8/mihomo
- ブランチ: (
ssh-config-aliasを含むブランチをチェックアウトしてください。例:ssh_system_v1.19.17) - コア:
adapter/outbound/ssh.go,adapter/outbound/ssh_system.go
📖 カスタム背景
複雑なネットワーク環境では、ユーザーがSSHの設定ファイルを維持している傾向を保っていることも多い。これらの構成には、次のものが含まれる場合があります。
- ProxyJump (ジャンプボード):は1 つ以上のジャンプボードを通じて目標ネットワークへアクセスする必要があります。
- ProxyCommand:クラウド認証ツールを利用する (Cloudflare AWS SSM など) を使用して接続を確立します。
- IdentityFile:は、ホストごとに異なるキーファイルに変更されます。
- Host 別名:エイリアスは親の IP かドメインのかわりに短いエイリアンの別名を使用します。
従来の Mihomo アダプター Go言語でネイティブの SSH ライブラリを使用することはできません。これらのシステムを使うことで、ユーザーは部品を使って高度に複雑なスレート論理をMihomoのプロキシに変換する、(Dialer ProxyCommand) の異常に高度なコマンドに変換されることもできる。
目標:Mihomoを"システムSSH クライアントを使うことができます。例えば、my-serverなどといった残りの認証プロセスを経て、 SSH 値を構成する my-server を使用すればよいのです。
✨ 機能の特徴
1. Gite-Configを備えたレポジトリ
トンネルをビルドするには、システムの ssh コマンドを実行することで、ミホモは SSH クライアントをサポートするすべてのコマンド:
- ✅
ProxyJump/JumpHost - ✅
ProxyCommand(cloudflared, nc など) - ✅
IdentityFile,User,Port - ✅
Match,Includeなどの高度なロジックを追加したり、構成する
2. スマートユーザの切り替え (sudo -u)
Mihomoは通常、root な権限で動作します (TUN モード等)。ユーザーの SSH クライアントは一般ユーザーディレクトリに配置されます。この機能は以下を実装します。
- 自動的にユーザーを検出または指定する
sudo -u <user> -iを使ってSSHのアバターを切り替えます。-iパラメータユーザーがロードしたログイン環境を確認するか、cloudflared等のコマンドを参照してください。
3. 秘密キーをゼロに設定する
Mihomoプロファイルに秘密鍵を変換する必要があるため、自動的に ~/.ssh/id_rsa を読み取り、IdentityFile を自動的に入力します。
🪨 フォーマット
パラメータの説明
| フィールド | 説明 |
|---|---|
type | 場合は ssh でなければなりません |
server | 重要:~/.ssh/config内のHost用のエイリアス |
port | 注:ターゲットサービス内部リスナーのポート番号**(通常 22) ⚠️ 直接「~/ssh/config」ポートをマッピングしないでください。 |
use-ssh-config-alias | この機能を true に設定します |
ssh-user | SSH コマンドを実行するユーザー名を指定します (macOS/Linuxユーザー名) |
設定の例
シーン 1:ベースホット (ProxyJump)
SSH のConfig (~/.ssh/config):
Host bastion\n HostName 1.2.3.4\n User admin\n\nHost internal-db\n HostName 10.0.0.5\n User root\n ProxyJump bastion # 自動的に bastion を経由してジャンプ
Mihomo設定
proxies:
- name: "Internal-DB-SSH"
type: ssh
server: "internal-db" # 直接エイリアスを入力
port: 22 # ターゲット内部SSHポート
use-ssh-config-alias: true
ssh-user: "your-username" # あなたのローカルユーザー名
シーン 2:Cloudflare Access (ProxyCommand)
SSHConfig:
Host my-cf-server\n HostName ssh.example.com\n User root\n # cloudflared コマンドが PATH に必要です\n ProxyCommand cloudflared access ssh --hostname %h
Mihomo設定
proxies:
- name: "CF-SSH"
type: ssh
server: "my-cf-server"
port: 22
use-ssh-config-alias: true
ssh-user: "your-username"
🛠️ 記述
Mihomo は接続要求を受信すると、内部で以下のようなコマンドを実行します。
sudo -u your-username -i ssh -W localhost:22 my-host-alias
このコマンドはSSH のポートへの TCP トンネルを与えるため、標準入力/出力のルートを構築します。このトンネルで、SSH プロトコルの握手を行い、会社が接続します。