CH-J Toolsupravljanje poslužiteljima preko SSH
Meni

Daljinski uređivač štednje i latency nadzor

Preuzmi datoteku

Jezična revizija ovog prijevoda je u tijeku. Ako je odlomak nejasan, pogledajte engleski izvornik.

Korijenski uzroci

Prethodni uređivač je ubacio svoju radnu datoteku u ciljni matični direktorij, koji često ne može biti zapisan od strane SSH račun pod /etc ili /var. SFTP preimenovanje nije dostavilo ovlaštenu sudo putanju, početnu provjeru sukoba, sigurnosnu provjeru metapodataka ili pouzdanu prepisku semantika. Njegova rukovodilac grešaka izbrisao privremenu kopiju, uklanjanje materijala za oporavak čak i kada je dovršetak bio neizvjesan.

Status sesije je prethodno razotkrio samo stanje veze. Nije bilo ICMP-a ni autentificirane SSH mjera odgovora, mjeranjem pokazatelja za terminal.

Spremi protokol

  1. Fiksni SSH pomoćnik otvara redovnu, jednolink datoteku pomoću deskriptor- relative operacije i O_NOFOLLOW za svaku komponentu putanje. Ona zauzima sadržaj, SHA-256 hash, uređaj/inode, UID, GID, kompletni bitovi dozvole, nanosekundna modifikacija/promjena vremena i svi čitljivi prošireni atributi. Jezgra potvrđuje hash i dekodira strogo UTF-8, čuvanje BOM. Svaki dokument dobiva neproziran editId, opsegnut na njegov priključak, terminal sesija i identitet poslužitelja.
  2. Neprivilegirana operacija pripreme rješava autentičan račun Dom kroz pwd.getpwuid(os.getuid()), stvara $HOME/ch-j-sm/ sa načinom rada 0700, i stvara privatni, ekskluzivni časopis oporavka. Odbačena je nesigurna kuća, simbolička radna površina ili radna površinа u vlasništvu drugog računa.
  3. Jezgro šalje skriveno, nasumično 128-bit .tmp radna datoteka kroz SFTP s ekskluzivna kreacija (wx), način rada 0600 i šezdeset sekundi vremenskog ograničenja kanala i opterećenja. Dnevnik sadrži cilj, izvornu osnovnu vrijednost i očekivani radni hash; ne sadrži akreditive.
  4. Jedan SSH exec izvršava cijelu finalizaciju, opcionalno kroz postojeći izvršitelj sudo. Pomoćnik se sigurno otvara i pogađa privatnu radnu kopiju i ispušta je. Ona zaključava originalnu inode, provjerava svoju osnovnu vrijednost, stvara ekskluzivnu odredišnu datoteku pored cilja, piše sve sadržaje, primjenjuje i potvrđuje metapodatke, provjera originala ponovno, i ispušta zamjenu.
  5. Izaberite direktorij os.replace Atomski zamjenjuje metu. Roditelj imenik je isprazan i konačna putanja, hash, inode i metapodaci su provjereni. Izvorna putanja ostaje dostupna do zamjene. Radna datoteka nikada nije premještena preko datotečnih sustava i nikada se ne uklanja finalizacijom.
  6. Nakon što Core primi potvrđen uspjeh, zasebno čišćenje ponovno provjeri finale sadržaj i sigurnosni metapodaci prije uklanjanja radne datoteke i dnevnika. Neuspjeh čišćenja još uvijek prijavi potvrđeno spremanje pomoću recoveryAvailable: true.

Neuspješno slanje, neuspješan sudo, sukob, pogreška metapodataka ili neuspjela zamjena čuva izvorni i bilo koji iscenirani materijal. Nedovršena upisivanja su identificirana kao takva i ne mogu se vratiti kao kompletni uređeni dokument. Izgubljeno SSH Prijavljen je status komunikacije, nedostajućeg izlaza, vremenska ograničenja i neočekivani rezultati finalizacije kao nepoznato, nikada kao spašen. Jezgro blokira još jednu spremu na nesigurnom dokumentu; nema automatskog ponovnog zamjene.

Metapodaci, privilegije i sigurnosne granice

Pomoćnik čuva i potvrđuje UID, GID i sve POSIX dozvole bitove, uključujući izvršne, setuid, setgid i ljepljive bite. Reproducira Linux prošireni atributi bajt za bajt, uključujući POSIX ACL-ove, mogućnosti i SELinux oznake. Vlasništvo i sadržaj datoteke su postavljeni prije sigurnosnih atributa, jer pisanje/chown može čistiti sposobnosti ili posebne dozvole bitova. Uklanjaju se nasljedni atributi odredišta koji su odsutni na izvorniku. Vrijeme promjene odražava novi zapis i nije kopiran iz originala.

Nečitljiv ili nereprezentativan atribut prekida operaciju; metapodaci nisu tiho ispušteni. Potpisi IMA/EVM-a izričito se odbacuju jer bi ih kopiranje sadržaja/inode vezanih za integritet nevažeće. Simulinks u ciljnoj ili domaćoj stazi, tvrdo-povezane datoteke i neregularne datoteke su odbijene. Nema na mjestu ili slabije SFTP Koristi se zamjenska datoteka za prepisivanje.

Obično zapisivanje uštedi kao SSH Račun. Zaštićeno štednje zahtijeva izričito { sudo: true }; sudo lozinka je opciona za sudo bez lozinke. Lozinke se validiraju i prenose samo na kanalu stdin, nikada unutar naredbe, dnevnika, radne datoteke, logera ili udaljene greške. Korijenski SSH sesije koriste postojeći direktni izvršitelj roota. Neuspješno odobrenje ostavlja originalnu i radnu kopiju netaknutu. Sve spremanje izvršeno kao root (direktni root SSH ili sudo) također odbacuje ciljne direktorije/rezervatore u vlasništvu ili zapisivanju od strane drugih računa, ili nosi pristup ACL, umjesto da vjeruje privilegirano ime putanje kontrolirano drugim računom.

Fiksni pomoćnik radi sa python3 -I -B: ignorira korisnika Python putanje, radni imenik i pakete korisničkih stranica, i ne piše bajt kod. Putevi i JSON argumenti su citirani u jezgri. Priključci nikada ne primaju proizvoljne SSH Izvršni ili SFTP Ruke. Postojeća pješčanica, CSP, dozvole manifest, provjera host-ključa i ažuriranje ostala u uporabi.

Plugin API i preostale Monaco integracije

Odvojeno raspoređeni UI Monaco/File Manager nije u ovom odjavu. Njezina integracija UI-a, sudo brzo, prljavi-buffer rukovanje i prijevodi nisu mogli biti implementirani ili testirani ovdje. Izvor paketnog dodatka je Hash & Kontrolna suma dodatak. Nije izumio izvor zamijene upravitelja datoteka.

Postojeće metode dostupne. Metode/opcije dodatka izložene su prethodnom utovarom u zaštićenoj kutiji i provjerenim dopuštenim radnim vremenom:

const opened = await chjPlugin.files.readText(sessionId, path);
// For a protected read, explicitly pass { sudo: true, sudoPassword }.

const result = await chjPlugin.files.saveText(sessionId, path, editor.getValue(), {
  editId: opened.editId,
  sudo: true,           // Include only after the user authorizes elevation.
  sudoPassword         // Omit for passwordless sudo; never persist this value.
});

if (result.ok && result.value.status === "saved") {
  // Mark this exact submitted editor version as saved. Later edits stay dirty.
} else {
  // Keep the Monaco model dirty. Translate result.error.code/status.
  // result.error.recoveryId/recoveryPath identify retained working material.
}

await chjPlugin.files.closeText(opened.editId);
const recovery = await chjPlugin.files.listRecovery(sessionId);
const copy = await chjPlugin.files.readRecovery(sessionId, recoveryId);
// Review copy.status and copy.text; open a fresh document before another save.
await chjPlugin.files.cleanupRecovery(sessionId, recoveryId);
// Cleanup rejects anything whose target is not currently confirmed.

Metode oporavka prihvaćaju opcionalni final { sudo: true, sudoPassword } Argument pri pregledu cilja zahtijeva povišenje. Oni zadržavaju radnu površinu korisnika koji je autentičan čak i kada je izvršen kroz sudo. Novinari preživljavaju ponovno pokretanje aplikacije i SSH se ponovno povezuju; oporavak nikada automatski ne ponavlja finalizaciju. Pregledati povratni spremnik na svježe otvorenu metu prije izričitog spremanja.

files.read Stražari čitaju, pregledaju i puštaju ručku. files.write Stražari štede i čišćenje. writeText i dalje odbija neuspjeh za postojeće dodatke; saveText vraća strukturiran { ok, value/error } Koverta Electron Ispušta vlastita svojstva na odbačene objekte greške. Nasljedstvo tri-argument writeText može koristiti početnu vrijednost jednog otvorenog dokumenta. Višestruki živi dokumenti za istu putanju zahtijevaju editId; dvosmisleno nasljeđe poziva ne uspijeju sigurno umjesto da odaberu početnu vrijednost drugog dokumenta. Priključci trebaju otpustiti neiskorištene ručke.

Vanjski korisnički interfejs mora odmah prikazati ušteđevinu, zadržati bafere prljave na neuspjehu, ponuditi sudo samo nakon neuspješnog dozvole/autentifikacije, pokazati sukobe bez prepisivanja, te ponuditi oporavak nakon gubitka veze ili nepoznatog ishoda. Mora prevesti ove države na češkom, njemačkom i engleskom jeziku. Predložena kopija stanja:

State Czech German English
Saving Ukládání… Wird gespeichert… Saving…
Confirmed Uloženo Gespeichert Saved
Failure Uložení selhalo Speichern fehlgeschlagen Save failed
Sudo required Vyžadováno oprávnění sudo sudo-Autorisierung erforderlich Sudo authorization required
Conflict Původní soubor byl změněn Originaldatei wurde geändert Original file changed
Disconnected Spojení bylo přerušeno Verbindung unterbrochen Connection lost
Unknown Výsledek uložení není znám Speicherergebnis unbekannt Save result unknown
Recovery Obnova je dostupná Wiederherstellung verfügbar Recovery available

Definicije zakretnosti i životni ciklus

Ping je latencija prijavljena od strane stvarnog klijentskog odjeka ICMP-a na rješeni IP koji koristi SSH. Jezgra poziva platformu ping izvršne asynhronno s fiksnim nizom argumenta, bez zahtjeva za pokretanjem ljuske ili administratora. Linux, macOS (uključujući ping6) i Windows argumenti su odabrani odvojeno. Blokiran ICMP, nedostajuća izvršna datoteka, vremensko ograničenje, neispravan izlaz ili odgovor sa gornjim vezanim Windows- om kao što je <1ms proizvodi nedostupnu vrijednost, a ne izmišljeni broj.

SSH RTT je monotonična performance.now() trajanje fiksnog true izvršni zahtjev preko postojećeg autentificiranog SSH -Klijent. Uključuje podešavanje kanala, obradu poslužitelja i isporuku odgovora; to nije čista mreža RTT ili SSH trajanje prijave. Prevedeni indikator napojnica objašnjava ovu razliku.

Praćenje počinje čim se terminal poveže. Sobe se pokreću istovremeno i asinhronno, s pet sekundi vremenskog ograničenja za zahtjev/proces. Sljedeći uzorak je zakazan 12 sekundi nakon završetka prethodnog uzorka, sprečavajući preklapanje. Prekida prekid rada ICMP-a, čisti timerere, otkazuje čekanje SSH rad i čišćenje vrijednosti. Provjera identiteta zapisa sprečava da se prethodna veza objavi nakon ponovnog povezivanja. Neuspjeh ICMP-a nikad se ne mijenja SSH stanje povezivanja.

Latency putuje unutar postojećeg state događaj / ssh:state IPC opterećenje:

latency: { pingMs: 24.1, sshRttMs: 31.25, measuredAt: "…" }

Nedostupni brojevi su null. Kompaktni indikator terminala koristi milisekunde, lokalizirani nedostupan tekst i češki/German/English etikete. Krije se na isključenju. Nisu potrebne dodatne mogućnosti izvođenja reflektora ili zahtjev za IPC-om.

Ovjeravanje i operativne granice

Korisnik je zatražio zadržavanje promjena u postojećem radnom stablu, trenutno feature/hash-checksum-plugin; nije provedena zamjenska grana ili nepovezano čišćenje.

Datoteke su izmijenjene za ovaj zadatak