CH-J Toolsszerverkezelés SSH felett
Menü

Távoli szerkesztő mentése és késleltetés ellenőrzése

Fájl letöltése

A fordítás nyelvi ellenőrzése folyamatban van. Ha egy rész nem egyértelmű, tekintse meg az angol eredetit.

Gyökér okok

Az előző szerkesztő feltöltötte a munkafájlját a célkönyvtárba, amelyet gyakran nem tud megírni a SSH fiók /etc vagy /var alatt. A SFTP rename nem adott át engedélyezett sudo útvonalat, alapkonfliktusellenőrzést, biztonsági metaadatok ellenőrzését vagy megbízható felülírását. Hibakezelője törölte az ideiglenes másolatot, eltávolítva a visszanyerési anyagot még akkor is, ha a befejezés bizonytalan volt.

A munkamenet állapota korábban csak a kapcsolat állapotát fedte fel. Nem volt ICMP vagy hitelesített SSH válaszmérés, amely a termináljelzőt táplálta volna.

Protokoll mentése

  1. A fix SSH segítő egy rendszeres, egy linkes fájlt nyit meg a deszkriptor-relatív a műveletek és a O_NOFOLLOW minden útvonalkomponensre. Ez rögzíti a tartalmat, SHA-256 hash, eszköz / inóda, UID, GID, teljes engedély bitek, nanoszekundum módosítás/módosítási idők és minden olvasható kiterjesztett attribútumok. A törzs ellenőrzi a hash-t és dekódolja a szigorú UTF-8-t, megőrizve egy BOM-ot. Minden dokumentum átlátszatlan editId-t kap, mely a plugin, terminál session és szerver identitására terjed ki.
  2. Egy kiváltságos előkészítési művelet megoldja a hitelesített számla home through pwd.getpwuid(os.getuid()), create $HOME/ch-j-sm/ with mode 0700 és létrehoz egy privát, exkluzív helyreállítási naplót. Egy másik fiók tulajdonában lévő nem biztonságos otthont, szimlink munkateret vagy munkateret elutasítanak.
  3. A 128-bit .tmp working file feltöltése a SFTP segítségével exkluzív alkotás (wx), mód 0600 és egy hatvan másodperces csatorna/feltöltési idő. A napló tartalmazza a célt, az eredeti alaphelyzetet és a várt munka hash; nem tartalmaz igazolványokat.
  4. A one SSH exec a teljes véglegesítést a-n keresztül végzi el, opcionálisan a a meglévő sudo végrehajtó. A segítő biztonságosan kinyitja és hashes a privát munkapéldányt, majd leöblíti. Ez zárolja az eredeti inode, ellenőrzi a kiindulási, létrehoz egy exkluzív célfájl mellett a cél, írja minden tartalmat, alkalmazza és ellenőrzi metaadatokat, ellenőrzi az eredeti újra, és öblíti a cserét.
  5. Egy azonos rendező os.replace atomilag helyettesíti a célpontot. A szülő A könyvtárat áthúzták, és a végső útvonal, hash, inóda és metaadatok is hitelesek. Az eredeti út a csereig elérhető. A munkafájlt soha nem mozgatják át a fájlrendszereken, és soha nem távolítják el véglegesítéssel.
  6. Miután Core kapott egy ellenőrzött sikert, külön tisztítás újra ellenőrzi a végső tartalom- és biztonsági metaadatok a munkafájl és a napló eltávolítása előtt. A takarítás sikertelensége még mindig egy megerősített mentést jelent a recoveryAvailable: true-val.

A nem sikerült feltöltés, sikertelen sudo, konfliktus, metaadat hiba vagy hibás csere tartja az eredeti és bármilyen színpadi anyag. A hiányos feltöltéseket ilyenként azonosították, és nem lehet teljes szerkesztett dokumentumként visszaállítani. Elveszett SSH kommunikáció, hiányzó kilépési állapot, időkimaradások és váratlan véglegesítési eredmények jelentik, mint unknown, soha nem mentett. A Core egy másik mentést blokkol egy bizonytalan dokumentumon; nincs automatikus csereismétlés.

Metaadatok, kiváltságok és biztonsági határok

A segítő megőrzi és ellenőrzi az UID-t, a GID-t és minden POSIX-engedély bitet, beleértve a végrehajtható, setuid, setgid és ragadós részeket. Reprodukálja a Linux kiterjesztett attribútumokat bájtra, beleértve a POSIX ACL-eket, képességeket és SELinux címkéket. A tulajdonjog és a fájltartalom a biztonsági attribútumok előtt van beállítva, mert az írások/csatlakozók képesek a képességek vagy különleges engedély bitek megtisztítására. Eltávolítják azokat az örökölt rendeltetési attribútumokat, amelyek nem szerepelnek az eredetiben. A módosítási idő az új írást tükrözi, és nem másolja le az eredetiből.

Egy olvashatatlan vagy irreleváns attribútum megszakítja a műveletet; a metaadatokat nem némán ejtik. Az IMA/EVM aláírásokat kifejezetten elutasítják, mivel a tartalom másolása/az inode-bound integritás aláírások érvénytelenné tenné azokat. A cél vagy otthoni útvonal szimlinkjeit, a merev fájlokat és a nem szabályos fájlokat elutasítják. A SFTP-t nem használják a helyükön lévő vagy gyengébb visszaírásra.

A hagyományos írható mentések a SSH fiókként futnak. Védett mentések explicit { sudo: true }-t igényelnek; a sudo jelszó nem kötelező jelszó nélküli sudo esetén. Jelszavakat csak a stdin csatornán érvényesítenek és adnak át, soha nem kerülnek be a parancsba, naplóba, munkafájlba, loggerbe vagy távoli hibába. Root SSH munkamenetek használja a meglévő közvetlen root executor. A hibás engedély sértetlenül hagyja az eredetit és a munkapéldányt. A rootként végrehajtott összes mentés (közvetlen gyökér SSH vagy sudo) szintén visszautasítja a más számlák tulajdonában lévő, illetve megírható célkönyvtárakat/ellenzőket, vagy ACL-t vezet, ahelyett hogy egy másik fiók által ellenőrzött privilegizált elérést bízna meg.

A fix segítő python3 -I -B-vel fut: figyelmen kívül hagyja a felhasználó Python útvonalait, a munkakönyvtárat és a felhasználói oldal csomagjait, és nem ír bytecode-et. Az utak és a JSON érvek shell-quoted in Core. A plugins soha nem kap önkényes SSH exec vagy SFTP fogantyúkat. Meglévő homokozó, CSP, nyilvánvaló engedélyek, gépi kulcs ellenőrzése és frissítés ellenőrzése továbbra is használatban van.

Plugin API és Monaco további integrációja

A külön elosztott Monaco/File Manager UI hiányzik ebből a pénztárból. Az UI integráció, sudo azonnali, piszkos-puffer kezelése és a fordítások nem lehet végrehajtani vagy tesztelni itt. A kötegelt bővítmény forrása a Hash & Checksum plugin. Nem találták fel a Fájlkezelő helyettesítő forrását.

A meglévő módszerek továbbra is rendelkezésre állnak. Az adalékanyag módszereit/lehetőségeit a homokozós előterhelés és az engedély nélküli futási idő teszi ki:

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.

A helyreállítási módszerek elfogadják a { sudo: true, sudoPassword } opcionális végső érvelését, amikor egy cél eléréséhez magasságra van szükség. Megtartják a hiteles felhasználó munkaterületét, még akkor is, ha azt sudo-n keresztül hajtják végre. A naplók túlélik az alkalmazás újraindítását és a SSH újracsatlakozását; a helyreállítás soha nem ismételi meg automatikusan a véglegesítést. Felül kell vizsgálni a visszanyert puffert egy frissen megnyitott célponttal szemben, mielőtt kifejezetten megmentenék.

files.read őrök olvasnak, ellenőrzik és kezelik a kiadást. A files.write őrök takarítják és javítják a tisztítást. A writeText még mindig elutasítja a meglévő bővítmények sikertelenségét; a saveText strukturált { ok, value/error } borítékot ad vissza, mert a Electron egyedi tulajdonságokat dob le az elutasított Error objektumokra. A writeText egy hagyományos három érv alapján egyetlen nyílt dokumentum alapvonalát használhatja fel. Az azonos útvonalhoz szükséges több élő dokumentum editId-t igényel; a kétértelmű hagyatéki hívások biztonságosan nem egy másik dokumentum alapvonalát választják. A bővítményeknek fel nem használt fogantyúkat kell kioldaniuk.

A külső UI-nak azonnal meg kell jelenítenie a mentést, a puffereket bepiszkolnia kell a hiba miatt, csak engedély/engedélykivonási hibák után kínál sudo-t, túlírás nélküli konfliktusokat kell mutatnia, és a kapcsolat elvesztése vagy ismeretlen kimenetele után helyreállítást kell felajánlania. Le kell fordítania ezeket az államokat cseh, német és angol nyelven. Javasolt állapotmásolat:

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

Latencia-meghatározások és életciklus

Ping! a tényleges ügyféloldali ICMP echo válasz által jelentett késleltetés az általa használt megoldott IP-re SSH. A Core egy fix argumentum tömbbel szinkronizálható platform ping-et használ shell vagy adminisztrátori startup követelmény nélkül. A Linux, macOS (beleértve a ping6-t) és a Windows argumentumokat külön választjuk. Blokkolt ICMP, hiányzó futtatható, időkimaradás, érvénytelen kimenet vagy csak felső határú Windows válasz, mint például a <1ms nem elérhető értéket eredményez, nem pedig feltalált számot.

SSH RTT a performance.now() állandó true exec kérésének egy monoton SSH kliensre vonatkozó időtartama. Magában foglalja a csatorna beállítását, a szerver feldolgozását és a válaszadást; nem tiszta hálózat RTT vagy SSH Bejelentkezési idő. A lefordított mutató eszköztár ezt a különbséget magyarázza.

A megfigyelés elkezdődik, amint a terminál csatlakozik. A szonda egyszerre és szinkronizálva fut, öt másodperces kérés/folyamatidővel. A következő mintát az előző minta befejezése után 12 másodperccel tervezik, megakadályozva ezzel az átfedést. Lekapcsolás megszakítja az ICMP-t, törli az időzítőket, megszünteti a SSH munkát és tisztázza az értékeket. A személyazonosság-ellenőrzések megakadályozzák, hogy az előzetes kapcsolat újrakapcsolatot követően közzétegyék. Az ICMP hiba soha nem változtatja meg a SSH kapcsolat állapotát.

Latency a meglévő state eseményen / ssh:state IPC hasznos teher:

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

A nem elérhető számok null. A kompakt terminál mutató milliszekundumokat használ, lokalizált nem elérhető szöveget és cseh/German/English címkéket. Elrejtőzik a lekapcsolásnál. Nem volt szükség további renderelési végrehajtási képességre vagy IPC-kérésre.

Hitelesítési és működési határértékek

A felhasználó kérte, hogy a meglévő munkafában, jelenleg feature/hash-checksum-plugin-ban tartsa meg a változásokat; nem történt ágkapcsoló vagy független tisztítás.

Fájlok módosultak ehhez a feladathoz