SSH — ključevi i napredne opcije
Lozinke su pogodne za pocetak, ali na produkcijskim serverima je standard prijavljivanje pomoću SSH ključeva — sigurniji su, brži za svakodnevni rad i otporni na brute-force napade. U ovoj lekciji uciš kako se kljucevi prave, postavljaju i koriste, i kako se preko SSH-a kopiraju fajlovi.
Javni i privatni ključ — ukratko
SSH ključevi rade na principu asimetricne kriptografije: postoje dva matematicki povezana broja (kljuca) — sta god se zakljuca jednim, otkljucava se SAMO drugim.
- Privatni ključ — držiš ga tajno, samo na svom računaru. Nikad ga ne deliš ni sa kim.
- Javni ključ — slobodno daješ. Postavljaš ga na svaki server na koji hoćeš da se prijaviš.
Kada se konektuješ, server šalje izazov koji samo neko sa odgovarajućim privatnim ključem može da reši. Tako server zna da si to ti, a privatni ključ nikad ne napušta tvoj računar.
Analogija: Javni ključ je katanac koji svuda ostaviš. Privatni ključ je jedini ključ koji otključava sve te katance — i držiš ga samo kod sebe.
ssh-keygen — kreiranje ključeva
ssh-keygen -t ed25519 -C "[email protected]"
Opcije:
-t ed25519— tip ključa (Ed25519 je moderan i siguran; alternativa jersa -b 4096)-C "komentar"— komentar koji pomaže da prepoznaš ključ kasnije
Komanda pita gde da sačuva ključ (pritisni Enter za podrazumevano) i opcionalnu lozinku (passphrase) za zaštitu privatnog ključa:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/student/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Your identification has been saved in /home/student/.ssh/id_ed25519
Your public key has been saved in /home/student/.ssh/id_ed25519.pub
Rezultat su dva fajla u ~/.ssh/:
id_ed25519— privatni ključ (nikom ne deliš)id_ed25519.pub— javni ključ (slobodno deliš)
Savet: Preporučuje se da postaviš passphrase. Čak i ako neko dođe do fajla privatnog ključa, ne može ga koristiti bez te lozinke.
~/.ssh/authorized_keys — gde server prima ključeve
Da bi te server pustio sa ključem, tvoj javni ključ mora biti zapisan na serveru, u fajlu:
~/.ssh/authorized_keys
(Pri čemu ~ označava home direktorijum korisnika kao kog se prijavljuješ.)
Svaki red u tom fajlu je jedan dozvoljen javni ključ. Možeš dodati više ključeva — recimo jedan sa laptopa, jedan sa drugog laptopa.
ssh-copy-id — najlakši način
Umesto da ručno kopiraš ključ, postoji komanda koja to radi za tebe:
ssh-copy-id [email protected]
Ova komanda se konektuje lozinkom (poslednji put) i automatski dodaje tvoj javni ključ u ~/.ssh/authorized_keys na serveru. Sledeće povezivanje radi automatski, ključem, bez kucanja lozinke.
Ručno dodavanje (ako ssh-copy-id nije dostupan)
# Na svom računaru — ispiši javni ključ
cat ~/.ssh/id_ed25519.pub
# Kopiraj ispis. Zatim, na serveru:
echo "ssh-ed25519 AAAA...tekst...ključa [email protected]" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Zašto chmod 600?
SSH je strog oko dozvola — odbiće authorized_keys ako je čitljiv drugima. Dozvola 600 znači "samo vlasnik može čitati i pisati". To sprečava da neki drugi korisnik servera pročita ili izmeni listu dozvoljenih ključeva i tako sebi otvori vrata.
Isto važi i za privatni ključ na tvom računaru — ~/.ssh/id_ed25519 mora biti 600. ssh-keygen to postavlja automatski.
ssh-agent — pamti passphrase
Ako si privatni ključ zaštitio passphrase-om, SSH će ga tražiti svaki put kad se konektuješ. Da to ne bude zamorno, tu je ssh-agent — program koji čuva otključan privatni ključ u memoriji za vreme tvoje sesije. Kucaš passphrase jednom, a ssh-agent ga pamti dok se ne odjaviš.
Većina modernih Linux desktop okruženja pokrene ssh-agent automatski. Možeš ručno dodati ključ sa:
ssh-add ~/.ssh/id_ed25519
scp — kopiranje fajlova preko SSH
scp (Secure Copy) kopira fajlove između računara koristeći SSH:
# Lokalni fajl → server
scp izvestaj.pdf [email protected]:/home/student/dokumenti/
# Server → lokalno
scp [email protected]:/var/log/syslog ./syslog-kopija.txt
# Ceo direktorijum (rekurzivno)
scp -r ./projekat [email protected]:/home/student/
# Nestandardni port (paznja: veliko -P, ne malo!)
scp -P 2222 fajl.txt [email protected]:/tmp/
Format: scp [opcije] izvor odrediste, gde su izvor i odredište ili lokalni putevi ili korisnik@host:putanja.
sftp — interaktivni transfer fajlova
sftp (SSH File Transfer Protocol) nudi interaktivnu sesiju sličnu starom FTP-u, ali enkriptovanu:
sftp [email protected]
Unutar sftp sesije:
sftp> ls # Lista fajlova na serveru
sftp> lls # Lista fajlova lokalno (l = local)
sftp> cd dokumenti # Promeni direktorijum na serveru
sftp> lcd ~/preuzimanja # Promeni lokalni direktorijum
sftp> get izvestaj.pdf # Preuzmi fajl sa servera
sftp> put novi-fajl.txt # Pošalji fajl na server
sftp> bye # Izađi
sftp je pogodan kad ne znaš tačno koji fajl tražiš, pa hoćeš da prošetaš po serveru i biraš.
Rezime komandi
| Komanda | Opis |
|---|---|
ssh-keygen -t ed25519 |
Generiši par ključeva |
ssh-copy-id user@host |
Kopiraj javni ključ na server |
ssh-add ~/.ssh/id_ed25519 |
Dodaj ključ u ssh-agent |
chmod 600 ~/.ssh/authorized_keys |
Postavi tačne dozvole |
scp fajl user@host:putanja |
Kopiraj fajl na server |
scp user@host:putanja lokalno |
Kopiraj fajl sa servera |
scp -r dir user@host:putanja |
Kopiraj direktorijum rekurzivno |
sftp user@host |
Interaktivni transfer fajlova |