SSH kapcsolat beállítása Linuxon

Két pingvin áll egy modern szerverteremben, háttérben csillagokkal. A pingvinek a technológia világában, ahol az SSH kapcsolat is fontos szerepet játszik.

Emlékszem, amikor először kellett távolról bejelentkeznem egy szerverre, és fogalmam sem volt, hogyan kezdjek hozzá. Mindenki csak annyit mondott: „Használj SSH-t”, mintha ez magától értetődő lenne. Órákig küszködtem, mire végre sikerült biztonságos kapcsolatot létesítenem. Azóta tudom, hogy ez a készség nem csak a rendszergazdák kiváltsága, hanem alapvető fontosságú bárki számára, aki Linux rendszerrel dolgozik vagy tanul.

Az SSH (Secure Shell) egy olyan protokoll, amely lehetővé teszi a biztonságos kommunikációt két számítógép között nyílt hálózaton keresztül. Titkosított csatornát biztosít, amelyen keresztül adatokat továbbíthatunk, parancsokat futtathatunk, vagy akár fájlokat másolhatunk. Az SSH beállítása sokféleképpen történhet – vannak, akik jelszavas hitelesítést részesítenek előnyben annak egyszerűsége miatt, míg mások a kulcsalapú hitelesítés megnövelt biztonságára esküsznek. Mindkét megközelítésnek megvan a maga helye a digitális világban.

Ebben a részben végigvezetlek az SSH kapcsolat beállításának teljes folyamatán, a szükséges csomagok telepítésétől kezdve a haladó biztonsági beállításokig. Megtanulod, hogyan generálj és kezelj SSH-kulcsokat, hogyan konfigurálj SSH szervert biztonságosan, és milyen trükkökkel teheted még hatékonyabbá a távoli munkavégzést. Gyakorlati példákon keresztül mutatom be a leggyakoribb problémák megoldását is, hogy magabiztosan használhasd ezt a nélkülözhetetlen eszközt.

Az SSH alapjai

A modern informatikai környezetben a távoli szerverek kezelése mindennapos feladat. Legyen szó egy weboldalról, adatbázisról vagy bármilyen hálózati szolgáltatásról, gyakran előfordul, hogy fizikailag távol vagyunk attól a géptől, amelyen a szoftver fut. Ilyenkor jön képbe az SSH, amely biztonságos csatornát biztosít a távoli rendszerek eléréséhez.

Az SSH protokollt eredetileg a telnet és az rsh (remote shell) protokollok leváltására fejlesztették ki, amelyek súlyos biztonsági hiányosságokkal rendelkeztek – például a jelszavakat és egyéb érzékeny adatokat titkosítatlanul továbbították a hálózaton. Az SSH ezzel szemben erős titkosítást használ, így a kommunikáció lehallgatása esetén sem juthat illetéktelen személy az adatokhoz.

„A biztonság nem egy termék, hanem egy folyamat. Nem elég egyszer beállítani az SSH-t, rendszeresen felül kell vizsgálni a konfigurációt a legújabb biztonsági ajánlások alapján.”

A Linux rendszereken az OpenSSH a legelterjedtebb implementáció, amely két fő komponensből áll:

  • Az SSH kliens (ssh), amellyel kapcsolódhatunk más gépekhez
  • Az SSH szerver (sshd), amely lehetővé teszi, hogy mások kapcsolódjanak a gépünkhöz

Mielőtt belevágnánk a részletekbe, fontos tisztázni néhány alapfogalmat:

🔑 Kliens: Az a számítógép, amelyről kapcsolódunk
🔒 Szerver: Az a számítógép, amelyhez kapcsolódunk
🔐 Hitelesítés: A folyamat, amely során bizonyítjuk, hogy jogosultak vagyunk a hozzáférésre
🌐 Port forwarding: Lehetővé teszi a hálózati forgalom továbbítását az SSH kapcsolaton keresztül
🛡️ Kulcspár: Egy nyilvános és egy privát kulcsból álló pár, amely a kulcsalapú hitelesítés alapja

Az SSH telepítése és alapvető beállítása

A legtöbb modern Linux disztribúció alapértelmezetten tartalmazza az SSH klienst, de a szerver komponenst általában külön kell telepíteni. Nézzük, hogyan történik ez a különböző disztribúciókon:

Telepítés Debian/Ubuntu rendszereken

A Debian alapú rendszereken (mint az Ubuntu) az alábbi paranccsal telepíthetjük az SSH szervert:

sudo apt update
sudo apt install openssh-server

A telepítés után a szolgáltatás automatikusan elindul. Ellenőrizhetjük a státuszát:

sudo systemctl status ssh

Ha minden rendben van, ehhez hasonló kimenetet kell látnunk:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-23 15:30:45 CEST; 2min 15s ago

Telepítés Fedora/CentOS/RHEL rendszereken

A Red Hat alapú disztribúciókon az alábbi parancsokkal telepíthetjük:

sudo dnf update
sudo dnf install openssh-server

A szolgáltatás elindítása és engedélyezése a rendszerindításkor:

sudo systemctl start sshd
sudo systemctl enable sshd

Telepítés Arch Linux rendszeren

Az Arch Linux és származékai esetén:

sudo pacman -Syu
sudo pacman -S openssh

A szolgáltatás elindítása és engedélyezése:

sudo systemctl start sshd
sudo systemctl enable sshd

Alapvető konfiguráció

Az SSH szerver konfigurációs fájlja a /etc/ssh/sshd_config. Mielőtt módosítanánk, készítsünk róla biztonsági másolatot:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Most már biztonságosan szerkeszthetjük a fájlt:

sudo nano /etc/ssh/sshd_config

Íme néhány alapvető biztonsági beállítás, amelyet érdemes megfontolni:

  1. A port megváltoztatása (opcionális, de megnehezíti az automatizált támadásokat):
   Port 2222
  1. Root bejelentkezés letiltása:
   PermitRootLogin no
  1. Jelszavas bejelentkezés kikapcsolása (csak kulcsalapú hitelesítés engedélyezése):
   PasswordAuthentication no
  1. Inaktív kapcsolatok időkorlátjának beállítása:
   ClientAliveInterval 300
   ClientAliveCountMax 2

A változtatások után újra kell indítani az SSH szolgáltatást:

sudo systemctl restart sshd

„A legbiztonságosabb rendszer az, amelyik ki van kapcsolva. Mivel ez ritkán kivitelezhető, a következő legjobb megoldás az, ha csak a szükséges szolgáltatásokat futtatjuk, és azokat is a lehető legbiztonságosabb konfigurációval.”

SSH kulcspárok létrehozása és kezelése

Az SSH kulcspárok használata jelentősen növeli a biztonságot a jelszavas hitelesítéshez képest. A kulcspár két részből áll: egy privát kulcsból, amelyet biztonságban kell tartanunk a saját gépünkön, és egy nyilvános kulcsból, amelyet megoszthatunk azokkal a szerverekkel, amelyekhez kapcsolódni szeretnénk.

Kulcspár generálása

Az SSH kulcspár létrehozásához használjuk az ssh-keygen parancsot:

ssh-keygen -t ed25519 -C "komment a kulcs azonosításához"

Az Ed25519 algoritmus modern és biztonságos, de ha régebbi rendszerekkel is kompatibilisnek kell lennünk, használhatjuk az RSA algoritmust is:

ssh-keygen -t rsa -b 4096 -C "komment a kulcs azonosításához"

A parancs futtatása után meg kell adnunk, hova mentse a kulcsokat (alapértelmezetten a ~/.ssh/ könyvtárba), és opcionálisan beállíthatunk egy jelszót a privát kulcs védelmére.

Fontos: A privát kulcsot soha ne osszuk meg másokkal! Ez olyan, mintha a lakáskulcsunkat adnánk oda idegeneknek.

A nyilvános kulcs megosztása a szerverrel

Miután létrehoztuk a kulcspárt, a nyilvános kulcsot fel kell tölteni a távoli szerverre. Erre több módszer is létezik:

1. Az ssh-copy-id használata

Ez a legegyszerűbb módszer:

ssh-copy-id felhasznalo@szerver.cim

A parancs bekéri a távoli felhasználó jelszavát, majd feltölti a nyilvános kulcsot a megfelelő helyre.

2. Manuális másolás

Ha az ssh-copy-id nem érhető el, manuálisan is másolhatjuk a kulcsot:

cat ~/.ssh/id_ed25519.pub | ssh felhasznalo@szerver.cim "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. Fájlátvitel és beállítás

Alternatív megoldásként átvihetjük a nyilvános kulcsot a szerverre SCP vagy SFTP segítségével, majd beállíthatjuk a megfelelő jogosultságokat:

scp ~/.ssh/id_ed25519.pub felhasznalo@szerver.cim:~/kulcs.pub
ssh felhasznalo@szerver.cim
mkdir -p ~/.ssh
cat ~/kulcs.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm ~/kulcs.pub

Kulcsok kezelése SSH-agent segítségével

Ha jelszóval védtük a privát kulcsunkat (ami erősen ajánlott), minden kapcsolódásnál meg kell adnunk ezt a jelszót. Az SSH-agent segítségével elkerülhetjük ezt a kellemetlenséget:

eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519

Most már jelszó megadása nélkül kapcsolódhatunk a szerverekhez, amíg az SSH-agent fut.

A modern rendszereken az SSH-agent általában automatikusan elindul a bejelentkezéskor, így csak az ssh-add parancsot kell futtatnunk.

Különböző kulcsok különböző szerverekhez

Ha több szerverhez kapcsolódunk, érdemes lehet különböző kulcsokat használni. Ehhez az SSH konfigurációs fájlját használhatjuk:

nano ~/.ssh/config

Példa konfiguráció:

Host szerver1
    HostName szerver1.pelda.com
    User felhasznalo1
    Port 22
    IdentityFile ~/.ssh/id_ed25519_szerver1

Host szerver2
    HostName 192.168.1.100
    User felhasznalo2
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_szerver2

Ezután egyszerűen kapcsolódhatunk a szerverekhez:

ssh szerver1
ssh szerver2

SSH szerver biztonságos konfigurálása

Az SSH szerver megfelelő konfigurálása kritikus fontosságú a biztonság szempontjából. Az alábbiakban részletesen áttekintjük a legfontosabb biztonsági beállításokat.

Alapvető biztonsági beállítások

Nyissuk meg a konfigurációs fájlt:

sudo nano /etc/ssh/sshd_config

Ajánlott biztonsági beállítások:

# Protokoll verzió (csak SSH2)
Protocol 2

# Hitelesítési beállítások
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes

# Időkorlátok
LoginGraceTime 30s
MaxAuthTries 3
MaxSessions 5
ClientAliveInterval 300
ClientAliveCountMax 2

# Egyéb biztonsági beállítások
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes

A változtatások után újra kell indítani az SSH szolgáltatást:

sudo systemctl restart sshd

„A biztonság és a kényelem fordítottan arányos egymással. Minden biztonsági intézkedés valamilyen kényelmetlenséget okoz, de a megfelelő egyensúly megtalálása kritikus fontosságú.”

Felhasználók korlátozása

Korlátozhatjuk, hogy mely felhasználók jelentkezhetnek be SSH-n keresztül:

# Csak bizonyos felhasználók engedélyezése
AllowUsers felhasznalo1 felhasznalo2

# VAGY csak bizonyos csoportok engedélyezése
AllowGroups ssh-users admins

Alternatív megoldásként tilthatunk is felhasználókat:

# Bizonyos felhasználók tiltása
DenyUsers vendeg teszt

# Bizonyos csoportok tiltása
DenyGroups guests

Hálózati korlátozások

Korlátozhatjuk, hogy mely IP-címekről lehet kapcsolódni:

# Csak bizonyos IP-címekről engedélyezzük a kapcsolódást
ListenAddress 192.168.1.100

Vagy használhatjuk a TCP Wrappers funkciót is (ha a rendszer támogatja):

sudo nano /etc/hosts.allow

Adjuk hozzá:

sshd: 192.168.1.0/24 10.0.0.5

Majd:

sudo nano /etc/hosts.deny

Adjuk hozzá:

sshd: ALL

Fail2Ban használata

A Fail2Ban egy hasznos eszköz, amely figyeli a sikertelen bejelentkezési kísérleteket, és ideiglenesen blokkolja azokat az IP-címeket, amelyekről túl sok sikertelen próbálkozás érkezik.

Telepítés:

sudo apt install fail2ban   # Debian/Ubuntu
sudo dnf install fail2ban   # Fedora/CentOS/RHEL
sudo pacman -S fail2ban     # Arch Linux

Konfiguráció:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Keressük meg az SSH szekciót, és módosítsuk igény szerint:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

Indítsuk el és engedélyezzük a szolgáltatást:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Port Forwarding és Tunneling

Az SSH nem csak távoli bejelentkezésre használható, hanem hálózati forgalom továbbítására is. Ez hasznos lehet például, ha egy távoli szerveren futó webszervert szeretnénk elérni a helyi böngészőnkből.

Lokális port forwarding

ssh -L 8080:localhost:80 felhasznalo@szerver.cim

Ez a parancs a helyi 8080-as portot a távoli szerver 80-as portjára irányítja. Most már elérhetjük a távoli webszervert a http://localhost:8080 címen.

Távoli port forwarding

ssh -R 8080:localhost:80 felhasznalo@szerver.cim

Ez fordítva működik: a távoli szerver 8080-as portját irányítja a helyi gép 80-as portjára.

Dinamikus port forwarding (SOCKS proxy)

ssh -D 1080 felhasznalo@szerver.cim

Ez létrehoz egy SOCKS proxyt a helyi 1080-as porton, amelyen keresztül bármilyen forgalmat továbbíthatunk.

Ha rendszeresen használjuk ezeket a funkciókat, beállíthatjuk őket az SSH konfigurációs fájlban is:

Host tunnel
    HostName szerver.cim
    User felhasznalo
    LocalForward 8080 localhost:80
    DynamicForward 1080

Haladó SSH technikák és tippek

Az SSH számos haladó funkciót kínál, amelyek megkönnyíthetik a mindennapi munkát. Nézzünk meg néhányat ezek közül.

SSH konfigurációs fájl testreszabása

A ~/.ssh/config fájl rendkívül hasznos lehet a gyakran használt kapcsolatok egyszerűsítésére:

# Alapértelmezett beállítások minden hoszthoz
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 10m

# Specifikus hoszt beállítások
Host dev
    HostName dev-server.example.com
    User developer
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_dev
    ForwardAgent yes

Host jumphost
    HostName jump.example.com
    User admin
    Port 22

# Ugróállomás használata
Host internal
    HostName internal-server.local
    User admin
    ProxyJump jumphost

Ezekkel a beállításokkal egyszerűen kapcsolódhatunk a szerverekhez:

ssh dev
ssh internal

SSH Multiplexing

Az SSH multiplexing lehetővé teszi, hogy több SSH kapcsolatot használjunk egyetlen TCP kapcsolaton keresztül. Ez jelentősen felgyorsíthatja az újabb kapcsolatok létrehozását:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 10m

Ezzel a beállítással az első kapcsolat létrehozása után a további kapcsolatok szinte azonnal létrejönnek, mivel újrahasználják az eredeti kapcsolatot.

Fájlátvitel SSH-n keresztül

Az SSH protokoll nem csak bejelentkezésre használható, hanem fájlátvitelre is. Az SCP (Secure Copy) és az SFTP (SSH File Transfer Protocol) mindkettő az SSH protokollt használja a biztonságos fájlátvitelhez.

SCP használata

Fájl másolása a helyi gépről a távoli szerverre:

scp helyi_fajl.txt felhasznalo@szerver.cim:~/cél_könyvtár/

Fájl másolása a távoli szerverről a helyi gépre:

scp felhasznalo@szerver.cim:~/távoli_fajl.txt ./helyi_könyvtár/

Teljes könyvtár másolása rekurzívan:

scp -r helyi_könyvtár/ felhasznalo@szerver.cim:~/cél_könyvtár/

SFTP használata

Az SFTP interaktívabb felületet biztosít a fájlátvitelhez:

sftp felhasznalo@szerver.cim

Ez megnyit egy interaktív shell-t, ahol különböző parancsokat adhatunk ki:

sftp> ls          # Távoli könyvtár listázása
sftp> lls         # Helyi könyvtár listázása
sftp> cd távoli_könyvtár    # Váltás távoli könyvtárba
sftp> lcd helyi_könyvtár    # Váltás helyi könyvtárba
sftp> get távoli_fajl       # Fájl letöltése
sftp> put helyi_fajl        # Fájl feltöltése
sftp> mget *.txt            # Több fájl letöltése
sftp> mput *.jpg            # Több fájl feltöltése
sftp> exit                  # Kilépés

X11 Forwarding

Az X11 Forwarding lehetővé teszi, hogy távoli grafikus alkalmazásokat futtassunk, amelyek a helyi képernyőnkön jelennek meg:

ssh -X felhasznalo@szerver.cim

A kapcsolódás után indíthatunk grafikus alkalmazásokat:

firefox &

Ez a Firefox böngészőt indítja el a távoli szerveren, de a felület a helyi gépünkön jelenik meg.

„Az SSH nem csak egy eszköz a távoli bejelentkezéshez, hanem egy svájci bicska, amely számtalan problémára kínál megoldást a hálózati adminisztráció területén.”

SSH Escape Sequences

Az SSH kliens támogat különböző escape szekvenciákat, amelyeket az aktív kapcsolaton belül használhatunk. Ezeket a ~ karakter bevitelével kezdeményezhetjük (új sorban, közvetlenül a sor elején):

  • ~. – Kapcsolat azonnali bontása
  • ~^Z – SSH kapcsolat háttérbe helyezése
  • ~# – Aktív kapcsolatok listázása (ha több kapcsolat van nyitva)
  • ~? – Súgó megjelenítése
  • ~C – Parancs mód megnyitása (pl. port forwarding hozzáadásához)

SSH és rsync kombinálása

Az rsync és az SSH kombinálása rendkívül hatékony módja a fájlok szinkronizálásának:

rsync -avz -e ssh helyi_könyvtár/ felhasznalo@szerver.cim:~/cél_könyvtár/

Ez a parancs csak a változott fájlokat másolja át, ami jelentősen gyorsabb lehet nagy könyvtárak esetén.

SSH hibaelhárítás és diagnosztika

Az SSH kapcsolatok létrehozásakor vagy használatakor különféle problémákba ütközhetünk. Ebben a részben a leggyakoribb problémákat és azok megoldásait tekintjük át.

Verbózis növelése a hibakereséshez

Ha problémánk van az SSH kapcsolattal, az első lépés a verbózis szintjének növelése:

ssh -v felhasznalo@szerver.cim     # Alapszintű verbózis
ssh -vv felhasznalo@szerver.cim    # Részletesebb információk
ssh -vvv felhasznalo@szerver.cim   # Maximális részletesség

Ez segít azonosítani, hogy pontosan hol akad el a kapcsolódási folyamat.

Gyakori hibaüzenetek és megoldásaik

„Connection refused”

Ez általában azt jelenti, hogy:

  • Az SSH szerver nem fut a célgépen
  • Tűzfal blokkolja a kapcsolatot
  • Rossz porton próbálunk kapcsolódni

Megoldások:

  • Ellenőrizzük, hogy fut-e az SSH szerver: sudo systemctl status sshd
  • Ellenőrizzük a tűzfal beállításait: sudo ufw status vagy sudo firewall-cmd --list-all
  • Ellenőrizzük, hogy a megfelelő portra kapcsolódunk-e

„Permission denied (publickey,password)”

Ez azt jelenti, hogy sem a kulcsalapú, sem a jelszavas hitelesítés nem sikerült.

Megoldások:

  • Ellenőrizzük, hogy a megfelelő felhasználónevet használjuk-e
  • Ellenőrizzük, hogy a nyilvános kulcs megfelelően fel van-e töltve a szerverre
  • Ellenőrizzük a szerver konfigurációját: sudo cat /etc/ssh/sshd_config | grep Password
  • Ellenőrizzük a jogosultságokat: ls -la ~/.ssh/

A ~/.ssh/ könyvtár és fájlok jogosultságai kritikusak:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys

„Host key verification failed”

Ez akkor fordul elő, ha a szerver SSH hosztkulcsa megváltozott (pl. újratelepítés után).

Megoldás:

ssh-keygen -R szerver.cim

Ez törli a régi hosztkulcsot a ~/.ssh/known_hosts fájlból.

SSH szerver naplófájlok elemzése

Ha szerveroldali problémáink vannak, érdemes megnézni a naplófájlokat:

sudo tail -f /var/log/auth.log    # Debian/Ubuntu
sudo tail -f /var/log/secure      # Fedora/CentOS/RHEL
sudo journalctl -u sshd -f        # Systemd alapú rendszerek

Kapcsolódási problémák tűzfalak esetén

Ha tűzfal blokkolja a kapcsolatot, engedélyeznünk kell az SSH portot:

UFW (Ubuntu/Debian)

sudo ufw allow ssh          # Alapértelmezett port (22)
sudo ufw allow 2222/tcp     # Egyedi port

FirewallD (Fedora/CentOS/RHEL)

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

Iptables

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

Teljesítmény optimalizálás

Ha lassú az SSH kapcsolat, próbáljuk meg az alábbi optimalizálásokat:

Host *
    Compression yes
    TCPKeepAlive yes
    ServerAliveInterval 60
    ServerAliveCountMax 3
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 10m

Ezek a beállítások a ~/.ssh/config fájlba kerüljenek.

SSH biztonsági legjobb gyakorlatok

Az SSH biztonságos protokoll, de csak akkor, ha megfelelően konfigurálják. Az alábbiakban összefoglaljuk a legfontosabb biztonsági gyakorlatokat.

Kulcsalapú hitelesítés használata

A jelszavas hitelesítés helyett mindig kulcsalapú hitelesítést használjunk:

  1. Generáljunk erős kulcspárt: ssh-keygen -t ed25519
  2. Töltsük fel a nyilvános kulcsot: ssh-copy-id felhasznalo@szerver.cim
  3. Tiltsuk le a jelszavas hitelesítést: PasswordAuthentication no

Erős kriptográfiai algoritmusok használata

Az SSH konfigurációs fájlban korlátozzuk az engedélyezett algoritmusokat:

# /etc/ssh/sshd_config
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
HostKeyAlgorithms ssh-ed25519,ssh-rsa,rsa-sha2-512,rsa-sha2-256

Rendszeres frissítések

Az OpenSSH rendszeres frissítése kritikus fontosságú:

sudo apt update && sudo apt upgrade     # Debian/Ubuntu
sudo dnf update                         # Fedora/CentOS/RHEL
sudo pacman -Syu                        # Arch Linux

Két faktoros hitelesítés (2FA)

Az SSH-hoz is beállíthatunk két faktoros hitelesítést, például a Google Authenticator segítségével:

sudo apt install libpam-google-authenticator    # Debian/Ubuntu
sudo dnf install google-authenticator           # Fedora/CentOS/RHEL
sudo pacman -S libpam-google-authenticator      # Arch Linux

Konfiguráció:

google-authenticator

Majd módosítsuk a PAM konfigurációt:

sudo nano /etc/pam.d/sshd

Adjuk hozzá:

auth required pam_google_authenticator.so

És az SSH konfigurációt:

sudo nano /etc/ssh/sshd_config

Módosítsuk:

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

„A biztonság nem egy célállapot, hanem egy folyamatos utazás. Az SSH beállítások rendszeres felülvizsgálata és frissítése elengedhetetlen a magas szintű biztonság fenntartásához.”

Jogosultságok korlátozása

Az SSH hozzáférést korlátozzuk csak azokra a felhasználókra, akiknek valóban szükségük van rá:

AllowUsers felhasznalo1 felhasznalo2
AllowGroups ssh-users admins

Hálózati szintű védelem

Az SSH szervert védjük hálózati szinten is:

  1. Tűzfal használata
  2. Fail2Ban beállítása
  3. VPN mögé helyezés kritikus rendszerek esetén

Rendszeres auditálás

Rendszeresen ellenőrizzük a bejelentkezési kísérleteket:

sudo lastb               # Sikertelen bejelentkezési kísérletek
sudo last | head -20     # Sikeres bejelentkezések

SSH és a modern DevOps gyakorlatok

Az SSH kulcsszerepet játszik a modern DevOps gyakorlatokban, különösen a CI/CD (Continuous Integration/Continuous Deployment) folyamatokban és az infrastruktúra automatizálásban.

SSH kulcsok használata CI/CD rendszerekben

A CI/CD rendszerek (pl. Jenkins, GitLab CI, GitHub Actions) gyakran SSH-t használnak a távoli szerverekhez való kapcsolódáshoz. Néhány legjobb gyakorlat:

  1. Dedikált SSH kulcsok használata az automatizáláshoz
  2. A kulcsok jogosultságainak korlátozása (csak a szükséges műveletekre)
  3. A privát kulcsok biztonságos tárolása (pl. Jenkins Credentials, GitLab/GitHub titkosított változók)

Példa GitLab CI konfigurációra:

deploy:
  stage: deploy
  script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan szerver.cim >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - ssh felhasznalo@szerver.cim "cd /var/www/app && git pull && npm install && pm2 restart app"
  only:
    - master

SSH és konfigurációkezelés

Az olyan konfigurációkezelő eszközök, mint az Ansible, Chef vagy Puppet, gyakran SSH-t használnak a távoli szerverek konfigurálásához.

Példa Ansible inventory fájlra:

[webszerverek]
web1 ansible_host=web1.pelda.com ansible_user=deploy
web2 ansible_host=web2.pelda.com ansible_user=deploy

[dbszerverek]

db1 ansible_host=db1.pelda.com ansible_user=dbadmin db2 ansible_host=db2.pelda.com ansible_user=dbadmin

[all:vars]

ansible_ssh_private_key_file=~/.ssh/ansible_id_ed25519 ansible_ssh_common_args=’-o StrictHostKeyChecking=no’

SSH Jump Hosts és Bastion Hosts

A modern infrastruktúrákban gyakran használnak „ugróállomásokat” (jump hosts) vagy „bástyagépeket” (bastion hosts) a belső hálózat védelme érdekében:

# ~/.ssh/config
Host bastion
    HostName bastion.pelda.com
    User admin
    IdentityFile ~/.ssh/id_ed25519_bastion

Host internal-*
    ProxyJump bastion
    User deploy
    IdentityFile ~/.ssh/id_ed25519_internal

Most már közvetlenül kapcsolódhatunk a belső szerverekhez:

ssh internal-web1

Ez automatikusan a bastion hoston keresztül kapcsolódik.

SSH és konténerizáció

A konténerizált környezetekben (pl. Docker, Kubernetes) az SSH használata kevésbé gyakori, de még mindig hasznos lehet a hibaelhárításhoz:

# Kapcsolódás egy Docker konténerhez
docker exec -it konténer_név /bin/bash

# Kapcsolódás egy Kubernetes podhoz
kubectl exec -it pod_név -- /bin/bash

Ha mégis SSH-t szeretnénk használni a konténerekben, gondoskodnunk kell az SSH szerver megfelelő konfigurálásáról és a kulcsok biztonságos kezeléséről.

Összehasonlító táblázatok

SSH hitelesítési módszerek összehasonlítása

Hitelesítési módszerElőnyökHátrányokAjánlott használat
Jelszavas hitelesítésEgyszerű beállítás
Nem igényel előzetes kulcscserét
Kitett brute force támadásoknak
A jelszavak ellophatók
Nem automatizálható könnyen
Csak ideiglenes vagy nem kritikus rendszerekhez
Kulcsalapú hitelesítésNagyon biztonságos
Automatizálható
Nem igényel jelszó megjegyzést
Kulcsok elvesztése esetén elvész a hozzáférés
Kulcsok megfelelő kezelése szükséges
Általános használatra és automatizáláshoz
Két faktoros hitelesítésRendkívül biztonságos
Még ellopott kulcs esetén is véd
Komplexebb beállítás
Több lépés a bejelentkezéshez
Magas biztonsági igényű rendszerekhez
Kerberos hitelesítésEgyszeri bejelentkezés (SSO)
Központosított felhasználókezelés
Komplex infrastruktúrát igényel
Nehezebb beállítani
Nagyvállalati környezetben

SSH szerveroldali konfigurációs beállítások

BeállításAjánlott értékHatásBiztonsági szint
Protocol2Csak SSH2 protokoll használata (biztonságosabb)Magas
PermitRootLoginnoRoot felhasználó közvetlen bejelentkezésének tiltásaMagas
PasswordAuthenticationnoJelszavas hitelesítés tiltásaMagas
PubkeyAuthenticationyesKulcsalapú hitelesítés engedélyezéseMagas
MaxAuthTries3Maximális hitelesítési próbálkozások számaKözepes
LoginGraceTime30sBejelentkezési időkorlátKözepes
PermitEmptyPasswordsnoÜres jelszavak tiltásaMagas
X11ForwardingnoX11 forwarding tiltása (ha nem szükséges)Közepes
AllowTcpForwardingnoTCP forwarding tiltása (ha nem szükséges)Közepes
ClientAliveInterval300Inaktív kapcsolatok ellenőrzése 5 percenkéntAlacsony
ClientAliveCountMax2Kapcsolat bontása 2 sikertelen ellenőrzés utánAlacsony

Valós példák és esettanulmányok

Az elméleti ismeretek után nézzünk néhány valós példát, amelyek bemutatják az SSH használatát különböző helyzetekben.

Példa 1: Webszerver automatizált telepítése

Tegyük fel, hogy egy új webszervert szeretnénk telepíteni és konfigurálni automatizáltan. Ehhez használhatjuk az SSH-t és egy egyszerű shell szkriptet:

#!/bin/bash
# webserver_setup.sh

# Kapcsolódás a szerverhez
ssh -i ~/.ssh/id_ed25519 admin@uj-szerver.pelda.com << 'EOF'

# Frissítések telepítése
sudo apt update
sudo apt upgrade -y

# Webszerver telepítése
sudo apt install -y nginx

# Tűzfal konfigurálása
sudo ufw allow 'Nginx Full'
sudo ufw allow ssh

# Nginx konfigurálása
sudo tee /etc/nginx/sites-available/default > /dev/null << 'CONF'
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}
CONF

# Weboldal létrehozása
sudo tee /var/www/html/index.html > /dev/null << 'HTML'
<!DOCTYPE html>
<html>
<head>
    <title>Üdvözöljük!</title>
</head>
<body>
    <h1>Az új webszerver sikeresen telepítve!</h1>
    <p>Ez egy automatizált telepítés eredménye.</p>
</body>
</html>
HTML

# Nginx újraindítása
sudo systemctl restart nginx

echo "A webszerver telepítése sikeres!"
EOF

Ezt a szkriptet a helyi gépünkről futtathatjuk, és automatikusan elvégzi a szerver konfigurálását.

Példa 2: Adatbázis biztonsági mentése SSH tunnel segítségével

Tegyük fel, hogy egy távoli MySQL adatbázisról szeretnénk biztonsági mentést készíteni, de a MySQL port nem érhető el közvetlenül az internetről (ami jó biztonsági gyakorlat). SSH tunnel segítségével megoldhatjuk ezt:

#!/bin/bash
# db_backup.sh

# SSH tunnel létrehozása
ssh -f -N -L 3307:localhost:3306 felhasznalo@db-szerver.pelda.com

# Várakozás a tunnel létrejöttére
sleep 2

# Biztonsági mentés készítése a helyi gépen
mysqldump -h 127.0.0.1 -P 3307 -u remote_user -p'remote_password' adatbazis_nev > backup_$(date +%Y%m%d).sql

# SSH tunnel leállítása
tunnel_pid=$(pgrep -f "ssh -f -N -L 3307:localhost:3306")
kill $tunnel_pid

echo "Az adatbázis biztonsági mentése elkészült: backup_$(date +%Y%m%d).sql"

Ez a szkript létrehoz egy SSH tunnelt, amely a helyi 3307-es portot a távoli szerver 3306-os portjára irányítja, majd elvégzi a biztonsági mentést a helyi gépen.

„Az SSH tunnel olyan, mint egy titkos alagút az internet dzsungelében. Lehetővé teszi, hogy biztonságosan elérjünk olyan szolgáltatásokat, amelyek egyébként nem lennének hozzáférhetőek vagy biztonságosak a nyílt interneten.”

Példa 3: Többszerveres monitoring SSH segítségével

Ha több szervert kell monitoroznunk, az SSH segítségével egyszerűen összegyűjthetjük az információkat:

#!/bin/bash
# monitor_servers.sh

# Szerverek listája
servers=(
    "web1.pelda.com"
    "web2.pelda.com"
    "db1.pelda.com"
    "db2.pelda.com"
)

# Eredmények fájlja
output_file="szerver_status_$(date +%Y%m%d).txt"
echo "Szerver monitoring - $(date)" > $output_file
echo "===============================" >> $output_file

# Minden szerveren lefuttatjuk a monitoring parancsokat
for server in "${servers[@]}"; do
    echo -e "\n$server:" >> $output_file
    echo "---------------------------------------" >> $output_file

    ssh -i ~/.ssh/monitoring_key monitoring@$server << 'EOF' >> $output_file
    echo "Uptime:"
    uptime
    echo -e "\nDisk usage:"
    df -h | grep -v tmpfs
    echo -e "\nMemory usage:"
    free -h
    echo -e "\nCPU load:"
    top -bn1 | head -n 5
    echo -e "\nActive connections:"
    netstat -tuan | grep ESTABLISHED | wc -l
EOF

    echo "---------------------------------------" >> $output_file
done

echo "A monitoring eredményei mentve: $output_file"

Ez a szkript minden szerverről összegyűjti a legfontosabb információkat, és egy fájlba menti őket.

BeOS

ITmozaik
Adatvédelmi áttekintés

Ez a weboldal sütiket használ, hogy a lehető legjobb felhasználói élményt nyújthassuk. A cookie-k információit tárolja a böngészőjében, és olyan funkciókat lát el, mint a felismerés, amikor visszatér a weboldalunkra, és segítjük a csapatunkat abban, hogy megértsék, hogy a weboldal mely részei érdekesek és hasznosak.