メインコンテンツにスキップ

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の設定ファイルを維持している傾向を保っていることも多い。これらの構成には、次のものが含まれる場合があります。

  1. ProxyJump (ジャンプボード):は1 つ以上のジャンプボードを通じて目標ネットワークへアクセスする必要があります。
  2. ProxyCommand:クラウド認証ツールを利用する (Cloudflare AWS SSM など) を使用して接続を確立します。
  3. IdentityFile:は、ホストごとに異なるキーファイルに変更されます。
  4. 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-userSSH コマンドを実行するユーザー名を指定します (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 プロトコルの握手を行い、会社が接続します。