Docs · Viite

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ää.

EngineNetworkMac → guest
Virtualization.frameworkNAT or host-onlySuoraan, vieraskoneen 192.168.64.x-vuokraan
Virtualization.frameworkBridgedSuoraan, sen LAN-osoitteeseen
1VM engineNAT or host-onlyVain loopback-porttivälityksen kautta
1VM engineBridgedSuoraan, 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_config on ensimmäinen-voittaa — Include olemassa olevan Host * -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. --uninstall poistaa tarkalleen rajamerkkilohkon eikä muuta. --print nä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.

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

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 ole sshd:tä ennen kuin kuva rakennetaan uudelleen. Muut Linux-vieraskoneisiin ei vaikuta.