SSH
Vieraskoneen tavoittaminen SSH:lla Macilta — mikä osoite oikeasti toimii, yksi rivi ssh-configiin, avaimet, tilit ja isäntäavaimen luottamus.
SSH on pois päältä jokaisella koneella, kunnes otat sen käyttöön. Sen käyttöönotto avaa kirjautumispolun vieraskoneeseen, eikä kukaan saisi saada sitä vahingossa.
1vm ssh enable dev
1vm ssh config --install # add the Include line to ~/.ssh/config
ssh dev # plain ssh now resolves the machine
Sovelluksessa on myös Configure → SSH -paneeli samoilla ohjaimilla; kumpikaan käyttöliittymä ei kääri toista.
Mikä osoite oikeasti toimii
Tämä osa hämmentää ihmisiä, ja se riippuu moottorista. Vieraskoneen
osoite, jonka näet komennolla 1vm list, ei aina ole sellainen, johon voit yhdistää.
| Engine | Network | Mac → guest |
|---|---|---|
| Virtualization.framework | NAT or host-only | Suoraan, vieraskoneen 192.168.64.x-vuokraan |
| Virtualization.framework | Bridged | Suoraan, sen LAN-osoitteeseen |
| 1VM engine | NAT or host-only | Vain loopback-porttivälityksen kautta |
| 1VM engine | Bridged | Suoraan, sen LAN-osoitteeseen |
1VM-moottorissa vieraskone on user-mode-verkkopinon takana vakiolla
10.0.2.15, eikä Macillasi ole rajapintaa tuolla aliverkolla. ssh 10.0.2.15 ei
koskaan toimi siellä. Mikä toimii on välitys:
ssh -p 2222 onevm@127.0.0.1
SSH:n käyttöönotto luo tämän välityksen puolestasi, ja se tulee voimaan live-tilassa — ei
uudelleenkäynnistystä. Välitykset sitoutuvat 127.0.0.1:een, joten SSH:n käyttöönotto ei koskaan altista
vieraskonetta verkkoosi.
Yksi rivi ssh-configiin
1vm ssh config --install lisää tarkalleen yhden rajamerkillä erotetun lohkon
tiedoston ~/.ssh/config alkuun:
# >>> 1VM managed >>> do not edit this block
Include ~/Library/Application Support/OneVM/VMs/.ssh/config
# <<< 1VM managed <<<
Kaikki muu generoidaan kirjaston omaan .ssh/-hakemistoon, joten tiedostossasi
pysyy yksi rivi ja 1VM omistaa loput. ONEVM_HOME siirtää koko asian,
joten projektikohtainen kirjasto kantaa oman SSH-configinsa.
Säännöt joita tämä noudattaa, koska se muokkaa tiedostoa jota se ei omista:
- Tiedoston alku, koska
ssh_configon ensimmäinen-voittaa —Includeolemassa olevanHost *-lohkon jälkeen häviäisi hiljaa. - Idempotentti. Kymmenen suoritusta jättää yhden lohkon.
- Atominen, varmuuskopio. Alkuperäinen kopioidaan aikaleimattuun
config.1vm-backup-…ennen kirjoitusta. - Palautettavissa.
--uninstallpoistaa tarkalleen rajamerkkilohkon eikä muuta.--printnäyttää sen kirjoittamatta. - Kieltäytyy uudelleenjärjestelyn sijaan. Jos configisi asettaa jo vaihtoehtoja kaikille isännille lohkon kohdalle, 1VM kertoo sen ja kieltäytyy sen sijaan että järjestäisi tiedostosi uudelleen.
- Ei varjosta oikeaa isäntää. Jos koneen nimi jo resolvautuu johonkin ssh-configissasi,
vain
<name>.1vm-alias generoidaan.
Generoitu lohko näyttää tältä — portti ja osoite tulevat yllä olevista saavutettavuussäännöistä, ei raa'asta vieraskoneen IP:stä:
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
Avaimet
Jokaisella koneella on oma Ed25519-avain paketissaan kohdassa agent-key, tila
0600. Koska se on kansiossa, 1vm clone kantaa sen mukana ja
klooni on tavoitettavissa samalla identiteetillä.
Voit käyttää omaa avaintasi. 1VM tallentaa sen polun ja kopioi vain
vastaavan .pub:in vieraskoneeseen — se ei koskaan lue, kopioi tai tallenna
yksityistä puoliskoa.
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
Tilit
1vm set dev ssh.users … hallitsee mitkä tilit ovat olemassa vieraskoneessa. Nimet
validoidaan vieraskoneperheen mukaan — Linux ja macOS ottavat [a-z_][a-z0-9_-]{0,31},
Windows on rajattu 20 merkkiin ja hylkää varatun välimerkin — ja
admin-jäsenyys vastaa wheel/sudo, Administrators tai admin
.
onevm on varattu. Se on tili, johon 1vm exec, 1vm task run ja
MCP-palvelin kirjautuvat, joten uudelleennimeäminen tai poistaminen rikkoisi ne. Paneeli
näyttää sen lukittuna rivinä agenttitilinä sen sijaan että piilottaisi —
kirjautuminen joka on olemassa mutta näkymätön kirjautumislistassa olisi valhe.
root ja Administrator ovat myös varattuja, ja root-kirjautuminen pysyy pois päältä.
Isäntäavaimen luottamus
Useimmat työkalut luottavat siihen mikä vastaa ensimmäisellä yhteydellä. 1VM tekee paremmin, koska sillä on out-of-band-kanava: se lukee vieraskoneen julkisen isäntäavaimen guest-agent-kanavan kautta, joka ei kulje autentikoitavan verkon läpi, ja kiinnittää sen.
| 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
Ristiriita on normaalia 1vm reset:in jälkeen, tilannevedoksen palautuksen jälkeen ennen kuin
sshd oli olemassa, tai uudelleenasennuksen jälkeen. Se on myös täsmälleen miltä hyökkäys näyttää
— joten se on aina painike jota painat, ei hiljainen ylikirjoitus.
Kloonaus. Identiteettiavain kopioidaan klooniin tarkoituksella; isäntäavaimen
kiinnitys ei, koska kaksi konetta yhdellä isäntäavaimella on oikea ongelma. Käytä
1vm clone dev test --rekey-ssh uudelleenluodaksesi vieraskoneen isäntäavaimet ensimmäisellä
käynnistyksellä.
Turvallisuusoletukset
- Vain avain-autentikointi. Salasana- ja keyboard-interactive-auth ovat pois, root-kirjautuminen pois, eikä agent- tai X11-välitystä.
- Välitykset sitoutuvat loopbackiin, joten vieraskonetta ei koskaan altisteta LAN:llesi SSH:n käyttöönotolla. Julkisen osoitteen sitominen on mahdollista mutta varoittaa selkein sanoin mitä se tarkoittaa.
- Yksityinen avainmateriaali ja tilien luontiargumentit kulkevat vain yksityistä kanavaa eivätkä koskaan lokiin.
Palautustila tyhjentää SSH-tilit
Palautustila hylkää kaiken käynnistyksen jälkeen kirjoitetun virran katkaisussa — mukaan lukien tilit ja avaimet provisionoitu vieraskoneeseen. Tämä ei ole bugi, ja 1VM hoitaa sen ajamalla provisionoinnin uudelleen jokaisella käynnistyksellä sen sijaan että luottaisi merkkitiedostoon. Odota vieraskoneen isäntäavaimen vaihtuvan joka kerta.
Vieraskoneesta Maciin
Käänteinen suunta — SSH vieraskoneesta Maciisi — tavoittaa Macin osoitteessa
10.0.2.2 1VM-moottorissa, ja vain porteille joilla on rekisteröity palvelu.
1VM ei ota macOS Remote Loginia käyttöön puolestasi; se pysyy päätöksenäsi
System Settingsissä.
Nykytila
SSH on toteutettu sovelluksessa, CLI:ssä ja molemmissa moottoreissa, ja katettu yksikkötestisarjalla. Kaksi rehellistä varoitusta:
- Live-vieraskoneen soak-testaus on edelleen avoin hyväksyntäportti.
- Toimitettu Omarchy-tehdaskuva on ennen
openssh:n lisäämistä sen pakettilistaan, joten tehdas-Omarchy-vieraskoneella ei olesshd:tä ennen kuin kuva rakennetaan uudelleen. Muut Linux-vieraskoneisiin ei vaikuta.