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.
| Engine | Network | Mac → guest |
|---|---|---|
| Virtualization.framework | NAT or host-only | Langsung, ke lease 192.168.64.x guest |
| Virtualization.framework | Bridged | Langsung, ke alamat LAN |
| 1VM engine | NAT or host-only | Hanya melalui port forward loopback |
| 1VM engine | Bridged | Langsung, 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_configfirst-obtained-wins —Includesetelah blokHost *existing hilang diam-diam. - Idempotent. Sepuluh kali tetap satu blok.
- Atomic, dengan backup. Original disalin ke
config.1vm-backup-…sebelum tulis. - Reversible.
--uninstallhapus tepat blok sentinel dan tidak yang lain.--printtampilkan 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>.1vmyang 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.
| State | What you see | What ssh does |
|---|---|---|
| Not learned yet | "the first connection will trust whatever answers" | StrictHostKeyChecking accept-new |
| Learned | the SHA256:… fingerprint and the date | StrictHostKeyChecking yes |
| Mismatch | a warning naming the date the old key was pinned, and a Relearn button | yes — 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
opensshditambahkan ke package list, jadi guest Omarchy factory tidak punyasshdsampai image rebuild. Guest Linux lain tidak terpengaruh.