# SSH

cmux ssh は、リモート マシンのワークスペースを作成します。ブラウザ ペインはリモート ネットワーク経由でルーティングされ、ファイルは scp 経由でドラッグ アンド ドロップされ、コーディング エージェントはローカル サイドバーに通知を送信し、ドロップ時にセッションが再接続されます。

## 使用法

```
cmux ssh user@remote
cmux ssh user@remote --name "dev server"
cmux ssh user@remote --command 'omp "investigate auth"'
cmux ssh user@remote -p 2222
cmux ssh user@remote -i ~/.ssh/id_ed25519
cmux ssh user@remote --transport mosh
cmux mosh user@remote
cmux mosh-tmux user@remote
cmux mosh-tmux user@remote --session agent-main
```

cmux ssh は、~/.ssh/config を読み取り、ホスト エイリアス、ID ファイル、およびプロキシ設定を確認します。すべてのフラグは、対応する ssh をミラーリングします。

## フラグ

| 旗 | 説明 |
| --- | --- |
| `--name` | ワークスペースのタイトルを設定する |
| `--command` | シェル起動後、最初のリモートターミナルでコマンドテキストを一度だけ実行する |
| `-p, --port` | SSH ポート (デフォルトは 22) |
| `-i, --identity` | ID ファイルへのパス |
| `-o, --ssh-option` | 任意の SSH オプションを渡します (例: -o StrictHostKeyChecking=no) |
| `--transport` | 対話型ターミナルのトランスポート: ssh（デフォルト）または mosh |
| `--no-focus` | ワークスペースに切り替えずに作成する |

## Mosh ターミナルトランスポート

Wi-Fi、VPN、ホットスポット、スリープ／復帰によるネットワーク変更をまたいで対話型ターミナルを維持するには、cmux ssh user@remote --transport mosh を使用します。Mosh が運ぶのはターミナル PTY のみで、リモートメタデータ、デーモンのブートストラップと制御、ブラウザプロキシ、アップロード、再接続操作の管理経路には引き続き SSH を使用します。

cmux はローカルに Mosh 1.4 以降を必要とし、起動前にリモートの mosh-server を確認します。クライアントがないか非対応、サーバーがない、またはリモート確認に失敗した場合は、理由を表示して SSH で接続を続行します。

名前付き tmux セッションを作成またはアタッチする Mosh ワークスペースを作成します（デフォルト: main）。tmux プロファイルは再接続とアプリセッション復元後も保持されます。これはローミング可能な tmux ターミナルであり、cmux ssh-tmux のネイティブミラーではありません。--session <name> でセッションを選び、その他のフラグは cmux mosh と同じです。Mosh がなければ同じプロファイルを SSH で実行します。

## SSHディープリンク

Web サイトまたはツールで \[cmux で開く\] ボタンを提供する必要がある場合は、cmux SSH ディープ リンクを使用します。リンクにより cmux が開き、確認プロンプトが表示され、ユーザーが確認した後に同等の cmux ssh コマンドが実行されます。

```
cmux://ssh?host=dev.example.com
cmux://ssh?host=dev.example.com&user=alice&port=2222&title=GPU%20box
cmux://ssh?host=workspace123.vm-ssh.freestyle.sh&user=workspace123%2Csession-token
cmux://ssh?host=dev.example.com&host-key-policy=accept-new&no-focus=true
```

Web サイトのボタンには cmux.com フォールバック URL を使用します。 cmux がインストールされていない場合は、ネイティブ リンクが開き、ダウンロードが表示されます。

```
https://cmux.com/deeplink/ssh?host=workspace123.vm-ssh.freestyle.sh&user=workspace123%2Csession-token&title=Freestyle
```

プロンプト ボタンとルール ボタンは同じフォールバック形状を使用します。カンマ、コロン、およびリテラルのプラス記号は、URL エンコード時に保持されます。

```
https://cmux.com/deeplink/prompt?text=Review%20this%20branch
https://cmux.com/deeplink/rules?name=freestyle&text=Prefer%20commas,%20colons:%20and%20small%20PRs
```

ダッシュボード ボタンには SVG アイコンを使用し、ラスター イメージが必要な場合は PNG ロゴを使用します。

```
https://cmux.com/cmux-icon.svg
https://cmux.com/logo.png
```

タイトル、ホスト エイリアス、ユーザー名が安全にエンコードされるように、URLSearchParams を使用してフォールバック URL を構築します。

```
const params = new URLSearchParams({
  host: "workspace123.vm-ssh.freestyle.sh",
  user: "workspace123,session-token",
  title: "Freestyle",
});

const href = "https://cmux.com/deeplink/ssh?" + params.toString();
```

| パラメータ | 意味 |
| --- | --- |
| `host` | 必須の SSH ホストまたは ~/.ssh/config エイリアス。 |
| `user` | オプションの SSH ユーザー。 cmux はそれを user@host としてホストと組み合わせます。 |
| `port` | オプションの SSH ポート、1 ～ 65535。 |
| `title` / `name` | オプションのワークスペースのタイトル。タイトルまたは名前のいずれか 1 つだけを使用します。 |
| `connect-timeout` | オプションの ConnectTimeout 値 (秒単位)、1 ～ 600。 |
| `server-alive-interval` | 秒単位のオプションの ServerAliveInterval 値 (1 ～ 3600)。 |
| `server-alive-count-max` | オプションの ServerAliveCountMax 値 (1 ～ 100)。 |
| `host-key-policy` | オプションの StrictHostKeyChecking ポリシー: accept-new、ask、strict、または yes。 |
| `no-focus` | オプションのブール値。 true は、ワークスペースに切り替えずにワークスペースを作成します。 |

安定したアプリには cmux://、Nightly には cmux-nightly://、デバッグまたはタグ付き開発ビルドには cmux-dev:// を使用します。

外部リンクは、ID ファイル、生の SSH オプション、コマンド、ProxyCommand、または転送ルールを渡すことはできません。代わりに、キー、ProxyJump、HostName、および詳細オプションを ~/.ssh/config に配置します。 cmux はコマンド プレビューを表示し、接続する前に SSH ターゲットを信頼することをユーザーに要求します。

## ブラウザペイン

リモート ワークスペースのブラウザ ペインは、すべての HTTP および WebSocket トラフィックをリモート マシンのネットワーク経由でルーティングします。 「localhost:3000」と入力すると、リモート ボックス上で実行されている開発サーバーが表示されます。 -L フラグなし、手動ポート転送なし。各リモート ワークスペースは分離された Cookie ストアを取得するため、セッションは接続ごとにスコープ設定されます。

## ドラッグアンドドロップ

画像またはファイルをリモート端末にドラッグすると、cmux は既存の SSH 接続を介して scp 経由でアップロードします。 cmux は、TTY によってフォアグラウンド SSH プロセスを検出し、ControlMaster 多重化を通じてアップロードをルーティングします。

## 通知

リモート マシン上のプロセスは、ローカル インスタンス上で実行される cmux コマンドを実行できます。コーディング エージェントがリモート ボックス上で cmux Notice を呼び出すと、通知がローカル サイドバーに表示されます。ワークスペースタブで青いリングが点灯します。 Cmd+Shift+U でそこにジャンプします。不安定な接続からの通知スパムは、ホストごとのクールダウンによって抑制されます。

## SSH 経由でエージェントをコーディングする

cmux claude-teams と cmux omo はどちらも SSH セッション内で動作します。リモート ホスト上の Go リレー デーモンは、ローカルの Swift CLI と同じ tmux-compat 変換を処理します。 Teammate エージェントは、リモート ボックスで計算が実行されている間、ローカル マシン上でネイティブ cmux スプリットとして生成されます。

```
# Inside an SSH session:
cmux claude-teams
cmux omo
```

## 再接続

接続が切断されると、cmux は指数バックオフ (3 秒、6 秒、12 秒、最大 60 秒) で再接続します。リモート セッションは持続し、再接続時に cmux が再接続され、最小画面勝利セマンティクスでサイズが変更されます。デフォルトのキープアライブ オプション (ServerAliveInterval=20、ServerAliveCountMax=2) は、構成ですでに設定されていない限り挿入されます。

## リレーデーモン

最初の接続時に、cmux はリモート ホスト (uname -s、uname -m) をプローブし、バージョン管理された cmuxd-remote バイナリをアップロードします。バイナリは標準入出力上で JSON-RPC を話し、次の 3 つのことを処理します。

| 特徴 | どうやって |
| --- | --- |
| ブラウザトラフィックプロキシ | デーモンの stdio チャネルを介した SOCKS5 と HTTP CONNECT |
| CLIリレー | HMAC-SHA256 認証を使用したリバース TCP トンネルにより、リモート プロセスが cmux コマンドをローカルに呼び出すことができます |
| セッション管理 | 再接続後もセッションを維持し、複数の添付ファイル間で PTY のサイズ変更を調整します |

デーモン バイナリはリモート ホストの ~/.cmux/bin/cmuxd-remote/<version>/<os>-<arch>/cmuxd-remote に保存され、アプリに埋め込まれた SHA-256 マニフェストに対して検証されます。

Canonical: https://cmux.com/ja/docs/ssh

Documentation index: https://cmux.com/llms.txt
