Docs · Referensi

SSH

Menjangkau guest via SSH dari Mac — alamat mana yang benar-benar bekerja, satu baris ssh config, kunci, akun dan trust host-key.

SSH mati di setiap mesin sampai Anda nyalakan. Mengaktifkannya membuka jalur login ke guest, dan bukan sesuatu yang diperoleh accident.

1vm ssh enable dev
1vm ssh config --install     # add the Include line to ~/.ssh/config
ssh dev                      # plain ssh now resolves the machine

Ada juga pane Configure → SSH di app dengan kontrol sama; tidak ada front end yang wrap yang lain.

Alamat mana yang benar-benar bekerja

Bagian yang menjerumuskan orang, dan tergantung engine. Alamat guest di 1vm list tidak selalu bisa dihubungkan.

EngineNetworkMac → guest
Virtualization.frameworkNAT or host-onlyLangsung, ke lease 192.168.64.x guest
Virtualization.frameworkBridgedLangsung, ke alamat LAN
1VM engineNAT or host-onlyHanya melalui port forward loopback
1VM engineBridgedLangsung, ke alamat LAN

Di engine 1VM guest di belakang stack jaringan user-mode di 10.0.2.15 konstan, dan Mac tidak punya interface di subnet itu. ssh 10.0.2.15 tidak pernah bekerja di sana. Yang bekerja forward:

ssh -p 2222 onevm@127.0.0.1

Menyalakan SSH membuat forward itu untuk Anda, dan diterapkan live — tanpa reboot. Forward bind 127.0.0.1, jadi SSH tidak pernah expose guest ke jaringan Anda.

Satu baris ditambahkan ke ssh config

1vm ssh config --install menambahkan tepat satu blok sentinel, di atas ~/.ssh/config:

# >>> 1VM managed >>> do not edit this block
Include ~/Library/Application Support/OneVM/VMs/.ssh/config
# <<< 1VM managed <<<

Sisanya digenerate ke .ssh/ library sendiri, jadi file Anda tetap satu baris dan 1VM miliki sisanya. ONEVM_HOME pindahkan semua, artinya library project-local bawa SSH config sendiri.

Aturan yang diikuti, karena mengedit file yang tidak dimiliki:

  • Atas file, karena ssh_config first-obtained-wins — Include setelah blok Host * existing hilang diam-diam.
  • Idempotent. Sepuluh kali tetap satu blok.
  • Atomic, dengan backup. Original disalin ke config.1vm-backup-… sebelum tulis.
  • Reversible. --uninstall hapus tepat blok sentinel dan tidak yang lain. --print tampilkan tanpa tulis.
  • Menolak alih-alih reorder. Jika config sudah set opsi untuk semua host di atas blok, 1VM beri tahu dan menolak alih-alih rearrange file.
  • Tidak shadow host nyata. Jika nama mesin sudah resolve ke sesuatu di ssh config, hanya alias <name>.1vm yang dikeluarkan.

Blok generated seperti ini — port dan alamat dari aturan reachability di atas, bukan IP guest mentah:

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

Kunci

Setiap mesin punya kunci Ed25519 sendiri di bundle agent-key, mode 0600. Karena di folder, 1vm clone membawanya dan klon dapat dijangkau identitas sama.

Anda bisa pakai kunci sendiri. 1VM simpan path dan salin hanya .pub matching ke guest — tidak pernah baca, salin atau simpan bagian private.

1vm ssh keys dev                    # show the machine key
1vm ssh keys dev --print-public     # the public line
1vm ssh keys dev --regenerate       # new keypair
1vm set dev ssh.identityFile ~/.ssh/id_ed25519

Akun

1vm set dev ssh.users … kelola akun mana ada di guest. Nama divalidasi per keluarga guest — Linux dan macOS ambil [a-z_][a-z0-9_-]{0,31}, Windows cap 20 karakter dan tolak tanda baca reserved — dan keanggotaan admin map ke wheel/sudo, Administrators, atau admin .

onevm reserved. Akun yang dipakai 1vm exec, 1vm task run dan server MCP login, jadi rename atau hapus akan break. Pane tampilkan baris terkunci agent account alih-alih sembunyikan — login ada tapi invisible di daftar login adalah kebohongan.

root dan Administrator juga reserved, dan root login tetap off.

Trust host-key

Kebanyakan alat trust apa pun jawab koneksi pertama. 1VM lebih baik, karena punya channel out-of-band: baca host key publik guest melalui channel guest-agent, yang tidak melintasi jaringan yang diautentikasi, dan sematkan.

StateWhat you seeWhat ssh does
Not learned yet"the first connection will trust whatever answers"StrictHostKeyChecking accept-new
Learnedthe SHA256:… fingerprint and the dateStrictHostKeyChecking yes
Mismatcha warning naming the date the old key was pinned, and a Relearn buttonyes — so the connection correctly fails
1vm ssh trust dev              # pin the current host key
1vm ssh trust dev --relearn    # re-pin after a legitimate change

Mismatch normal setelah 1vm reset, restore snapshot sebelum sshd ada, atau reinstall. Juga persis seperti serangan — jadi selalu tombol yang ditekan, bukan overwrite diam-diam.

Kloning. Kunci identitas disalin ke klon sengaja; pin host-key tidak, karena dua mesin satu host key masalah nyata. Gunakan 1vm clone dev test --rekey-ssh regenerate host key guest saat boot pertama.

Default keamanan

  • Auth kunci saja. Password dan keyboard-interactive off, root login off, tidak ada agent atau X11 forwarding.
  • Forward bind loopback, jadi guest tidak pernah expose ke LAN dengan SSH. Bind alamat publik mungkin tapi peringatkan dengan kata jelas artinya.
  • Material kunci private dan argumen buat akun lewat channel private saja dan tidak pernah ke log.

Mode rollback hapus akun SSH

Mode rollback buang semua ditulis sejak boot saat power-off — termasuk akun dan kunci diprovision ke guest. Ini bukan bug, dan 1VM handle dengan re-run provisioning setiap boot alih-alih trust file marker. Expect host key guest berubah setiap kali.

Guest ke Mac

Arah balik — SSH dari guest ke Mac — jangkau Mac di 10.0.2.2 di engine 1VM, dan hanya port dengan layanan terdaftar. 1VM tidak akan enable macOS Remote Login; tetap keputusan Anda di System Settings.

State saat ini

SSH diimplementasi di app, CLI dan kedua engine, dan dicakup unit test suite. Dua caveat jujur:

  • Live-guest soak testing masih acceptance gate outstanding.
  • Factory image Omarchy shipped predates openssh ditambahkan ke package list, jadi guest Omarchy factory tidak punya sshd sampai image rebuild. Guest Linux lain tidak terpengaruh.