Docs · リファレンス

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.frameworkNAT または host-only直接。ゲスト 192.168.64.x リース
Virtualization.frameworkbridged直接。LAN アドレス
1VM エンジンNAT または host-onlyloopback ポート転送のみ
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
不一致旧鍵固定日の警告と Relearnyes — 接続は正しく失敗
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 ゲストは影響なし。