SSH
Mac から SSH でゲストに到達 — 実際に使えるアドレス、ssh config に 1 行追加、鍵、アカウント、host key 信頼。
SSH は全マシンでオフ直到有効化。有効化はゲストへのログイン経路を開く — 偶然得られるべきではない。
1vm ssh enable dev
1vm ssh config --install # ~/.ssh/config に Include 行
ssh dev # 通常 ssh でマシン名解決
アプリにも Configure → SSH ペインがあり同じ操作。どちらも他方をラップしない。
実際に使えるアドレス
つまずきやすい部分。エンジン依存。1vm list のゲストアドレスは常に接続可能ではない。
| エンジン | ネットワーク | Mac → ゲスト |
|---|---|---|
| Virtualization.framework | NAT または host-only | 直接。ゲスト 192.168.64.x リース |
| Virtualization.framework | bridged | 直接。LAN アドレス |
| 1VM エンジン | NAT または host-only | loopback ポート転送のみ |
| 1VM エンジン | bridged | 直接。LAN アドレス |
1VM エンジンではゲストは固定 10.0.2.15 のユーザーモード NAT 背後。Mac にそのサブネットの IF はない。ssh 10.0.2.15 は動かない。動くのは転送:
ssh -p 2222 onevm@127.0.0.1
SSH 有効化でその転送を作成。live 適用、再起動不要。転送は 127.0.0.1 にバインド — SSH 有効化でゲストをネットワークに公開しない。
ssh config に追加される 1 行
1vm ssh config --install は ~/.ssh/config 先頭に sentinel ブロック 1 つ:
# >>> 1VM managed >>> do not edit this block
Include ~/Library/Application Support/OneVM/VMs/.ssh/config
# <<< 1VM managed <<<
残りはライブラリ .ssh/ に生成。あなたのファイルは 1 行増えるだけ。ONEVM_HOME で全体移動 — プロジェクトローカルライブラリは独自 SSH config。
ルール(所有外ファイルを編集するため):
- ファイル先頭 —
ssh_configは first-obtained-wins。Includeが既存Host *の後では黙って負ける。 - 冪等。 10 回実行しても 1 ブロック。
- 原子的 + バックアップ。 書込前に
config.1vm-backup-…へコピー。 - 可逆。
--uninstallは sentinel のみ削除。--printは表示のみ。 - 並べ替え拒否。 ブロック位置より上に全 Host 向け設定があると 1VM は告知して拒否。
- 実ホストを隠さない。 マシン名が既に解決するなら
<name>.1vmエイリアスのみ。
生成ブロック例 — ポートとアドレスは上記到達性ルールから、生ゲスト IP ではない:
Host dev dev.1vm
HostName 127.0.0.1
Port 22417
User dev
IdentityFile ".../dev.vm/agent-key"
IdentitiesOnly yes
AddressFamily inet
StrictHostKeyChecking yes
ConnectTimeout 5
鍵
各マシンは bundle 内 agent-key に Ed25519、0600。フォルダ内なので 1vm clone も運び、クローンも同一 identity で到達。
独自鍵可。1VM はパスのみ保存。一致 .pub のみゲストへ — 秘密鍵は読まない・コピーしない・保存しない。
1vm ssh keys dev
1vm ssh keys dev --print-public
1vm ssh keys dev --regenerate
1vm set dev ssh.identityFile ~/.ssh/id_ed25519
アカウント
1vm set dev ssh.users … でゲスト内アカウント管理。名前はゲスト族で検証 — Linux/macOS [a-z_][a-z0-9_-]{0,31}、Windows 20 文字上限と予約句読点拒否 — 管理者は wheel/sudo、Administrators、admin。
onevm 予約。1vm exec、1vm task run、MCP がログイン。改名・削除で壊れる。ペインは agent アカウントとしてロック行表示 — 存在するが一覧に見えないログインは嘘。
root と Administrator も予約。root ログインオフ。
host key 信頼
多くのツールは初回接続で応答を信頼。1VM は out-of-band: guest-agent で公開 host key を読み(認証対象ネットワークを通らない)固定。
| 状態 | 表示 | ssh |
|---|---|---|
| 未学習 | 「初回接続は応答を信頼」 | StrictHostKeyChecking accept-new |
| 学習済 | SHA256:… と日付 | StrictHostKeyChecking yes |
| 不一致 | 旧鍵固定日の警告と Relearn | yes — 接続は正しく失敗 |
1vm ssh trust dev
1vm ssh trust dev --relearn
1vm reset、sshd 前スナップショット復元、再インストール後の不一致は正常。攻撃と同じ見え方 — 常にボタン操作、黙って上書きなし。
クローン。 identity 鍵は意図的コピー。host key pin はコピーしない — 2 マシン同一 host key は問題。1vm clone dev test --rekey-ssh で初回 boot に host key 再生成。
セキュリティデフォルト
- 鍵認証のみ。パスワード・keyboard-interactive オフ、root オフ、agent/X11 転送なし。
- 転送は loopback にバインド — SSH 有効化で LAN 公開なし。公開アドレスへのバインドは可能だが意味を明示警告。
- 秘密鍵とアカウント作成引数は private チャネルのみ、ログに出ない。
ロールバックモードは SSH アカウント消去
ロールバックモード は電源オフ時に boot 以降の書き込みすべて破棄 — ゲスト provision アカウント・鍵含む。バグではなく、1VM は marker 信頼ではなく毎 boot provision 再実行。ゲスト host key も毎回変わる。
ゲスト → Mac
逆方向 — ゲストから Mac へ SSH — 1VM エンジンでは 10.0.2.2、登録サービスのポートのみ。1VM は macOS リモートログインを有効化しない。System Settings での判断のまま。
現状
SSH はアプリ・CLI・両エンジンに実装、ユニットテストあり。2 点:
- live-guest soak テストが未完了の acceptance gate。
- 出荷 Omarchy factory イメージは
opensshパッケージ追加前 — イメージ再ビルドまで factory Omarchy にsshdなし。他 Linux ゲストは影響なし。