grep
caută fișierul ssh_known_hosts
pentru linia (sau liniile) care încep cu x06
(^
indică un început de rând în a expresie uzuala) și îl emite.
Din om ssh-keygen
:
ssh-keygen -l [-f input_keyfile]
[...]
-l Afișează amprenta fișierului cheie publică specificat. Chei private RSA1
sunt de asemenea suportate. Pentru cheile RSA și DSA, ssh-keygen încearcă
găsiți fișierul cheie publică care se potrivește și imprimă amprenta. Dacă
combinat cu -v, o reprezentare artistică ASCII a cheii este sup…
pliat cu amprenta.
Asa de ssh-keygen -l -f -
citește cheia de la intrarea standard (adică din linia care a fost scoasă de grep
) și își scoate amprenta digitală (-
folosit ca nume de fișier indică intrarea standard).
The sed
partea este cea mai dificilă. Trebuie să înțelegeți bine expresiile regulate pentru a înțelege ce face.
sed
rulează comanda s/model/înlocuire/
pe fiecare linie de intrare, adică înlocuiește model
cu înlocuire
și copiază linia la ieșirea standard. Dacă model
nu se găsește în linie, linia este copiată neschimbată.
The model
sed
cauta este: ^.*\(SHA256:\S\+\).*(\([^)]\+\))
. Este o expresie regulată, desigur.
Poate fi defalcat astfel:
începutul rândului (^
), urmat de zero sau mai multe caractere (.*
), urmat de primul grup (partea dintre \( ... \)
; ajungem la detalii mai târziu), urmat de zero sau mai multe caractere (.*
), urmat de al doilea grup, care este cuprins între paranteze literale (\( ... \))
.
Primul grup este SHA256:\S\+
. Aceasta înseamnă un șir literal SHA256:
, urmat de unul sau mai multe caractere fără spații (\S\+
) - cu toate acestea, trebuie menționat că nu toate sed
implementările vor sprijini \S
ca o indicație a caracterului non-spațial. Deci primele meciuri din grupă SHA256:
urmat de orice caractere, până la primul spațiu.
Al doilea grup este [^)]\+
, adică unul sau mai multe caractere care nu sunt egale cu paranteza de închidere. Ținând cont de faptul că întregul grup este pus în paranteză, al doilea grup se potrivește cu orice șir plasat între paranteze, până la paranteza de închidere.
Rezumând, sed
caută în linie un model format din SHA256:
plus orice caractere non-spațiu, și apoi orice șir plasat în paranteze, cu orice între ele.
Modelul potrivit este înlocuit cu \2: \1
care este textul care se potrivește celui de-al doilea grup (\2
), două puncte, spațiu și textul care se potrivește cu primul grup (\1
).
De exemplu, dacă ssh-keygen
ieșirea conține o linie ca
începe ceva SHA256:123456 mijloc ceva (text în interiorul părintelui) termina ceva
sed
va înlocui acea linie cu
text în interiorul părintelui: SHA256:123456 termina ceva
Liniile care nu conțin modelul nu vor fi modificate.