docs(chei-ssh): procedura de mutare a profilelor pe VM 303/304 si cheile de admin

Sectiunea 7 acopera tot drumul: ce contine de fapt fiecare profil (parola in
fisier, keypair de profil, keypair global — se afla cu -noRegistry=y, fara GUI),
folderul de pregatire, conversia la publickey cu -storePw=n / -pk=a, verificarea
care prinde un Ctrl+S uitat, si importul cheii pe VM 303. Include lista celor 11
profile cu numele scurtate la copiere si serverul fiecaruia.

Sectiunea 6 tine acum toate cele 5 chei publice (doi angajati, trei ale statiei
de birou) si tabelul pe servere, verificat pe amprenta, nu pe comentariu.

Capcane platite pe drum, notate ca atare:
- stergerea keypair-urilor GLOBALE din User keypair manager lasa fara
  credentiala orice profil care se baza pe ele — asa a ramas mut
  romfast_bitvise.tlp;
- vadeco.tlp avea cheia privata salvata in profil, deci s-ar fi dus cu fisierul;
- abcval (Bitvise 9.32) respinge Ed25519, acolo intra doar RSA;
- conpress blocheaza IP-ul la conexiuni repetate: se exclude in Access control,
  nu doar se sterge din lista de blocati.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FnMP82sffxQYxWRjy5sfKo
This commit is contained in:
Marius
2026-09-02 00:08:31 +03:00
parent a4fe127926
commit dee3d1d2f5
5 changed files with 174 additions and 23 deletions

View File

@@ -189,6 +189,8 @@ debifeaza/sterge **parola salvata**, seteaza publickey + keypair-ul angajatului.
ramane din copie (fara prompt de verificare). Avantaj: niciun transfer de fingerprint; risc: ramane din copie (fara prompt de verificare). Avantaj: niciun transfer de fingerprint; risc:
daca uiți sa stergi parola, o livrez odata cu profilul — de aceea e doar alternativa. daca uiți sa stergi parola, o livrez odata cu profilul — de aceea e doar alternativa.
Pentru toate profilele deodata, cu verificare care prinde parola uitata: **sectiunea 7**.
### Scripturi neinteractive (comun ambelor variante) ### Scripturi neinteractive (comun ambelor variante)
Daca angajatul va rula si scripturi neinteractive (ca in `docs/diagnostic-spatiu-clienti.md`): Daca angajatul va rula si scripturi neinteractive (ca in `docs/diagnostic-spatiu-clienti.md`):
@@ -245,8 +247,11 @@ ssh-keygen -lf docs\chei-publice\vm304.pub # amprenta, pentru corelare cu logu
| Fisier | Amprenta SHA-256 | Cine | | Fisier | Amprenta SHA-256 | Cine |
|---|---|---| |---|---|---|
| `docs/chei-publice/vm303.pub` | `BDidUbM24Do2ySosEeVuP9wYSRo2+soOg4UhlNcUzTQ` | `romfast@VM-303` | | `docs/chei-publice/vm303.pub` | `BDidUbM24Do2ySosEeVuP9wYSRo2+soOg4UhlNcUzTQ` | angajat, `romfast@VM-303` |
| `docs/chei-publice/vm304.pub` | `g1HHsnnqmbwEas7SFJuaUDcQLdsZKwNTklSXZO2mbLw` | `romfast@VM-304` | | `docs/chei-publice/vm304.pub` | `g1HHsnnqmbwEas7SFJuaUDcQLdsZKwNTklSXZO2mbLw` | angajat, `romfast@VM-304` (clona lui 303) |
| `docs/chei-publice/marius-lenovo-birou.pub` | `Rp4QdhbGw1G7eNY4T66VAeRSMbb8kMgdWExvOCwn7Wg` | admin, statia de birou (`C:\Users\mmari\.ssh\id_ed25519`) |
| `docs/chei-publice/marius-lenovo-birou-rsa.pub` | `3LTMHACTsF21CfoHwG6oHlmNgynoOl43zPGz1exe87w` | admin, aceeasi statie — RSA 4096, doar pentru serverele care refuza Ed25519 |
| `docs/chei-publice/marius-hx90g.pub` | `XxLBMaYY0BhhOnYnIsnboLEswEGDoRic+0ZGDIuJo6Q` | admin, `marius@Marius-HX90G` |
VM 304 e clona lui VM 303, deci a pornit cu **aceeasi** cheie privata; a fost regenerata pe VM VM 304 e clona lui VM 303, deci a pornit cu **aceeasi** cheie privata; a fost regenerata pe VM
304 (`ssh-keygen -t ed25519 -C "romfast@VM-304"`, plus stergerea keypair-ului mostenit din 304 (`ssh-keygen -t ed25519 -C "romfast@VM-304"`, plus stergerea keypair-ului mostenit din
@@ -257,29 +262,33 @@ identitatea VM 303 si nu se vede diferenta in loguri.
### Serverele pe care sunt copiate cheile ### Serverele pe care sunt copiate cheile
Lista traieste in `scripts/bitvise-chei.ps1` (variabila `$Servere`) — se actualizeaza acolo, Lista traieste in `scripts/bitvise-chei.ps1` (variabila `$Servere`) — se actualizeaza acolo,
nu aici, ca sa nu existe doua adevaruri. nu aici, ca sa nu existe doua adevaruri. Tabelul de mai jos e starea verificata la 2026-09-01
cu `-Actiune List` (comparatie pe amprenta, nu pe comentariu — comentariile se repeta).
| Server (profil din `D:\GoogleDrive`) | VM-303 | VM-304 | | Server (profil din `D:\GoogleDrive`) | VM-303 | VM-304 | birou Ed | birou RSA | HX90G |
|---|---|---| |---|---|---|---|---|---|
| `automotive.tlp` | da | da | | `automotive.tlp` | da | da | da | — | da |
| `avis.tlp` | da | da | | `avis.tlp` | da | da | da | — | da |
| `clever-motors.tlp` | da | da | | `clever-motors.tlp` | da | da | da | — | da |
| `conpress_romfast.tlp` | da | da | | `conpress_romfast.tlp` | da | da | da | — | da |
| `eduard.tlp` | da | da | | `eduard.tlp` | da | da | da | — | da |
| `ems.tlp` | da | da | | `ems.tlp` | da | da | da | — | da |
| `romconstruct.bscp` | da | da | | `romconstruct.bscp` | da | da | da | — | da |
| `romfast_bitvise.tlp` = **10.0.20.36:22122** (Oracle productie) | da | da | | `sigma.tlp` | da | da | da | — | da |
| `sigma.tlp` | da | da | | `vadeco.tlp` | da | da | da | — | da |
| `vadeco.tlp` | da | da | | `vending.tlp` | da | da | da | — | da |
| `vending.tlp` | da | da | | `10.0.20.36:22122` (Oracle productie) | da | da | da | — | da |
| `abcval.tlp` | **nu** | **nu** | | `abcval.tlp` | nu | nu | nu | **da** | nu |
`romfast_bitvise.tlp` si intrarea `10.0.20.36` sunt **acelasi server** (liste de chei identice) — `abcval` ruleaza Bitvise SSH Server 9.32 si respinge Ed25519 cu `KeyNotSupported` — pe el intra
a doua e pastrata ca ruta de rezerva, fiindca parola din `bitvise_10.0.20.36.bscp` a expirat si doar chei RSA. De aceea coloana "birou RSA" exista: e aceeasi statie, alta pereche de chei.
ruta aceea se conecteaza cu `-keypairFile` in loc de parola. Un angajat care are nevoie de `abcval` isi genereaza in paralel o pereche RSA 3072/4096.
`abcval` ruleaza Bitvise SSH Server 9.32 si respinge Ed25519 cu `KeyNotSupported`. Daca un `romfast_bitvise.tlp` (`roadigi.romfast.ro:22122` = `188.26.14.103`) si `10.0.20.36:22122` sunt
angajat chiar are nevoie de el, genereaza o pereche RSA 3072/4096 in paralel si urca **acel** `.pub`. **acelasi server**, vazut din exterior si din reteaua interna — listele de chei sunt identice.
Profilul extern **nu mai autentifica neinteractiv** (`Attempting none authentication` → nicio
metoda disponibila, deci nici parola stocata, nici keypair global valid); pana se repara din GUI,
ruta interna `10.0.20.36` este cea care functioneaza, si e cea din script.
Restul profilelor din `D:\GoogleDrive` sunt clienti expirati (timeout / conexiune refuzata) sau Restul profilelor din `D:\GoogleDrive` sunt clienti expirati (timeout / conexiune refuzata) sau
servere Linux/OpenSSH, unde SPKS nu exista (`cod 201: Failed to request PublicKey subsystem`) — servere Linux/OpenSSH, unde SPKS nu exista (`cod 201: Failed to request PublicKey subsystem`) —
@@ -304,6 +313,139 @@ server picat iese cu un cod de retur, nu cu o fereastra care asteapta. Coduri ut
Un `Remove` care raporteaza "cheie inexistenta" pe un server unde cheia chiar era inseamna ca Un `Remove` care raporteaza "cheie inexistenta" pe un server unde cheia chiar era inseamna ca
te-ai conectat pe alt cont decat cel pe care a fost adaugata. te-ai conectat pe alt cont decat cel pe care a fost adaugata.
## 7. Mutarea profilelor mele pe VM 303, convertite la publickey
Profilele mele de client se conecteaza cu **parola salvata in fisier**. Copiate ca atare pe VM
303, angajatul primeste parolele tuturor clientilor. Conversia la publickey se face pe **copii**,
nu pe profilele de lucru.
De ce merita copiate in loc de reconstruite de la zero: **host key-ul calatoreste in profil**
(verificat pe toate cele 11 cu `-noRegistry=y` — niciun "host key rejected"), deci angajatul nu
mai are de verificat manual cate un fingerprint per client.
### Ce contine de fapt fiecare profil
Se afla fara sa deschizi nimic in GUI, ruland comanda cu `-noRegistry=y` (blocheaza registry-ul,
deci ce reuseste vine din fisier):
```powershell
$spksc = 'C:\Program Files (x86)\Bitvise SSH Client\spksc.exe'
foreach ($f in Get-ChildItem 'D:\vm303-profile') {
$o = & $spksc "-profile=$($f.FullName)" -noRegistry=y -unat=y -initialKexTimeout=20 "-cmd=List Server" 2>&1 | Out-String
'{0,-24} {1}' -f $f.Name, (($o -split "`n" | Select-String 'Attempting|Signing with client key' | Select-Object -First 2) -join ' / ')
}
```
Starea la 2026-09-01, inainte de conversie:
- 9 profile → `Attempting password authentication` = **parola in fisier, portabila** (nu e legata
de contul meu Windows, deci pleaca odata cu fisierul);
- `vadeco.tlp` → `Signing with client key 'Profile 1'` = **cheie privata Ed25519 salvata in
profil**. Copiat asa, angajatul primeste cheia mea privata — singurul lucru din procedura care
chiar are consecinte;
- `romfast_bitvise.tlp` → nimic. Initial am citit asta ca "foloseste o cheie globala din
registry", dar verificarea ulterioara (`-pk=a`, care ar incerca orice cheie globala) arata
`Attempting none authentication` si apoi nicio metoda: profilul **nu are nicio credentiala
utilizabila**. Nu e gata de copiat — trebuie deschis in GUI si reparat inainte, altfel
angajatul primeste un profil care doar cere parola.
### Pasul 1 — folderul de pregatire
```powershell
$dest = 'D:\vm303-profile'
New-Item -ItemType Directory -Force $dest | Out-Null
'automotive.tlp','avis.tlp','clever-motors.tlp','conpress_romfast.tlp','eduard.tlp',
'ems.tlp','romconstruct.bscp','romfast_bitvise.tlp','sigma.tlp','vadeco.tlp','vending.tlp' |
ForEach-Object { Copy-Item "D:\GoogleDrive\$_" $dest -Force }
```
Folderul e **in afara** lui `D:\GoogleDrive` intentionat: pana la pasul 2 copiile inca au parolele
inauntru si n-au ce cauta in sincronizarea cu cloud-ul.
Lipsesc din lista, cu motiv: `abcval.tlp` (Bitvise 9.32, respinge Ed25519) si
`bitvise_10.0.20.36.bscp` (acelasi server cu `romfast_bitvise.tlp`, cu parola expirata).
### Lista profilelor pregatite, cu numele scurte
Numele au fost scurtate la copiere; astea sunt fisierele care pleaca pe VM 303 / VM 304 (pe VM
304 stau in `D:\roa\BITVISE\`). Coloana "server" e citita din fisier, fara conectare.
| Fisier (copie) | Original din `D:\GoogleDrive` | Server | Utilizator |
|---|---|---|---|
| `automotive.tlp` | `automotive.tlp` | `78.96.115.213:22122` | `automotive` |
| `avis.tlp` | `avis.tlp` | `86.124.94.107` | `romfast` |
| `clever.tlp` | `clever-motors.tlp` | `clever-motors.go.ro` | `romfast` |
| `conpress.tlp` | `conpress_romfast.tlp` | `185.132.173.105:22322` | `romfast` |
| `eduard.tlp` | `eduard.tlp` | `extra.edituraeduard.ro` | `romfast` |
| `ems.tlp` | `ems.tlp` | `185.132.173.240` | `romfast` |
| `romconstruct.bscp` | `romconstruct.bscp` | `82.76.217.177` | `romfast` |
| `romfast.tlp` | `romfast_bitvise.tlp` | `roadigi.romfast.ro:22122` | `romfast` |
| `sigma.tlp` | `sigma.tlp` | `82.137.26.46` | `romfast` |
| `vadeco.tlp` | `vadeco.tlp` | `100.93.100.75` (Tailscale) | `romfast` |
| `vending.tlp` | `vending.tlp` | `79.119.86.134` | `romfast` |
Trei fisiere au fost redenumite: `clever-motors` → `clever`, `conpress_romfast` → `conpress`,
`romfast_bitvise` → `romfast`. Restul si-au pastrat numele. `romfast.tlp` merge pe copie (a fost
reparat acolo), desi originalul din `D:\GoogleDrive` a ramas fara credentiala.
### Pasul 2 — conversia (GUI, obligatoriu manual)
`-storePw=n` scoate parola, `-pk=a` pune metoda initiala pe publickey cu "orice cheie accepta
serverul" — asa profilul nu depinde de pozitia cheii in managerul angajatului. Ambele sunt
*profile modifications*: se aplica la incarcare, dar **Bitvise nu salveaza profilul din linia de
comanda** ("it will not be saved unless the user manually saves it"), deci Ctrl+S e al tau.
```powershell
Get-ChildItem 'D:\vm303-profile' | ForEach-Object {
Start-Process -Wait 'C:\Program Files (x86)\Bitvise SSH Client\BvSsh.exe' `
-ArgumentList "-profile=$($_.FullName)", '-storePw=n', '-pk=a'
}
```
In fiecare fereastra: **Ctrl+S**, apoi inchizi — `-Wait` face bucla sa treaca la urmatorul.
La **`vadeco.tlp`**, inainte de Ctrl+S: Login → **User keypair manager** → scope **Profile** →
sterge keypair-ul de acolo.
### Pasul 3 — verificarea, inainte sa plece ceva spre VM 303
Aceeasi comanda ca la inceputul sectiunii. Dupa conversie, pe **niciun** profil nu mai are voie
sa apara `Attempting password authentication` sau `Signing with client key 'Profile 1'`. Daca
apar, Ctrl+S nu s-a facut pe acel profil — verificarea e singurul lucru care prinde asta, fiindca
fereastra inchisa fara salvare nu da niciun semnal.
Stare la 2026-09-01, dupa conversie: cele 11 copii nu mai incearca nicio metoda pe cont propriu
(parola scoasa, keypair de profil sters la `vadeco`), host key-ul e in continuare in fisier
(`hostkey_prompt=0`), iar cu o cheie furnizata explicit — `-keypairFile=...`, exact ce va face
managerul de keypair-uri al angajatului — **10 din 11 se autentifica**. Al 11-lea, `conpress`,
nu e o problema de profil: si originalul, si copia primesc EOF de la `185.132.173.105:22322`,
adica serverul ne blocheaza temporar IP-ul dupa conexiunile de azi. Se reia mai tarziu.
Atentie la un efect secundar: stergerea keypair-urilor **globale** din User keypair manager (utila
ca sa nu plece cheia mea cu profilele) lasa fara credentiala orice profil care se baza pe ele —
in cazul nostru originalul `romfast_bitvise.tlp`. Se repara importand cheia la loc, sau se
foloseste ruta interna `10.0.20.36:22122` catre acelasi server.
### Pasul 4 — pe VM 303
1. Copiezi folderul (ex. in `C:\profile`).
2. BvSsh → Login → **User keypair manager** → **Import** `C:\Users\romfast\.ssh\id_ed25519`,
scope **Global**.
3. Test per client — trebuie `Attempting publickey authentication` + `Authentication completed`:
```powershell
& 'C:\Program Files (x86)\Bitvise SSH Client\spksc.exe' -profile=C:\profile\ems.tlp -unat=y -cmd="List Server"
```
### Ce nu rezolva conversia
Stergerea parolei din profil **nu revoca nimic** — parola contului ramane valida pe serverul
clientului si oricine o stie intra in continuare. Daca angajatul nu trebuie sa poata intra cu
parola deloc, parola se schimba pe server sau se dezactiveaza metoda `password` pe cont
(Control Panel → intrarea contului/grupului → Authentication).
## Capcane ## Capcane
- Cheia privata nu se primeste niciodata "in avans" de la angajat ca backup — daca se pierde, se - Cheia privata nu se primeste niciodata "in avans" de la angajat ca backup — daca se pierde, se

View File

@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/AOH3Q5xDKnCjAs3c2VGP5PTRGvgAfnW/8xrcVtBJc marius@Marius-HX90G

View File

@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC88mX/oQnAoU54kazp6iYmmg91IR8pbnYV3aw5aJfSsiSBUjqo+XbvrWRvq//lli48k2kuNfq8olKrPvqKHcIccbcbgFrES5k2ErSyXjvbUlxuyHFRIfBoXvAhMMX6LZR+4Qc0i3VThQ1PgY0tYDbf2XQBAyrog5EU9H/q2NzJEulTs7kSR0FIt1goWXqKJYLA9Pn7Ardt7doPzR8EH/spB8hXctO0BaAorX3p3rd4bvOZoOcht4pTmyJBRzoZRRlscCZRCOxjQDk+y4v9eOPzwMc0dRlVxIbqt8Sua5khGTlmeQTmDqxCmdtgrTNWT4hwPVG1L4Jfw2bgX3IqCGKB4juDUF+Eh6hrQeuTIF7xbCIGGy9N/lKIKO3vr4sTf51gVM9CWJ0bE/CTKbiRPfWbUXIUA4yZ96gJf0QAqcIcutnntomdtkdV8G1RYVKSQEE4oxF3mCRxR+1d5Fn/UXGlms9Q2u/QAq7n5BYLPczUFSkdBdfITOqiCIzlX8WpPD7v/vt8Wsbyf24B/FSYvp+X0AcX5qQbNeljChAxqRy6VNhmh5ucUkMFxfUSTWij+AVqmCPvxVVFKPw32G6jN59BmwirmIxd0i6wTRj3rrUuyO/6+kjErjthkYKFIDBAgdCnV0rrkrPRNKmbS0DtgRcID3ILq2UqR3AYmDf2azf8hQ== mmarius28@gmail.com

View File

@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKZrP2TJDrt6bkwADP/Wh3m2Id9Fpqf6a8Zf3UEvOLrR mmarius28@gmail.com

View File

@@ -32,11 +32,17 @@ $Servere = @(
@{ N='eduard'; A=@('-profile=D:\GoogleDrive\eduard.tlp') } @{ N='eduard'; A=@('-profile=D:\GoogleDrive\eduard.tlp') }
@{ N='ems'; A=@('-profile=D:\GoogleDrive\ems.tlp') } @{ N='ems'; A=@('-profile=D:\GoogleDrive\ems.tlp') }
@{ N='romconstruct'; A=@('-profile=D:\GoogleDrive\romconstruct.bscp') } @{ N='romconstruct'; A=@('-profile=D:\GoogleDrive\romconstruct.bscp') }
# romfast_bitvise = roadigi.romfast.ro:22122 (188.26.14.103), ruta externa catre ACELASI
# server ca 10.0.20.36 de mai jos. Din 2026-09-01 nu mai autentifica neinteractiv: era
# singurul profil care folosea un keypair GLOBAL, iar keypair-urile globale au fost sterse
# din User keypair manager. Pana se importa cheia la loc, intrarea 10.0.20.36 e cea care
# duce cheile pe acest server.
@{ N='romfast_bitvise'; A=@('-profile=D:\GoogleDrive\romfast_bitvise.tlp') } @{ N='romfast_bitvise'; A=@('-profile=D:\GoogleDrive\romfast_bitvise.tlp') }
@{ N='sigma'; A=@('-profile=D:\GoogleDrive\sigma.tlp') } @{ N='sigma'; A=@('-profile=D:\GoogleDrive\sigma.tlp') }
@{ N='vadeco'; A=@('-profile=D:\GoogleDrive\vadeco.tlp') } @{ N='vadeco'; A=@('-profile=D:\GoogleDrive\vadeco.tlp') }
@{ N='vending'; A=@('-profile=D:\GoogleDrive\vending.tlp') } @{ N='vending'; A=@('-profile=D:\GoogleDrive\vending.tlp') }
# abcval: Bitvise 9.32, refuza Ed25519 (KeyNotSupported) — doar cu cheie RSA # abcval: Bitvise 9.32, refuza Ed25519 (KeyNotSupported) — pe el se ruleaza separat, cu un
# .pub RSA (ex. docs\chei-publice\marius-lenovo-birou-rsa.pub)
@{ N='abcval'; A=@('-profile=D:\GoogleDrive\abcval.tlp') } @{ N='abcval'; A=@('-profile=D:\GoogleDrive\abcval.tlp') }
# Oracle prod = ACELASI server ca romfast_bitvise.tlp (verificat: liste de chei identice). # Oracle prod = ACELASI server ca romfast_bitvise.tlp (verificat: liste de chei identice).
# Ramane in lista ca ruta de rezerva: parola din profil e expirata, deci host/port/user # Ramane in lista ca ruta de rezerva: parola din profil e expirata, deci host/port/user