Bosh sahifa Wiki SSH

SSH

SSH — masofaviy kompyuterga shifrlangan terminal orqali kirish, buyruq bajarish, fayl uzatish va tunnel yaratish uchun ishlatiladigan protokol. Uning to‘liq nomi Secure Shell hisoblanadi.

SSH xavfsiz bo‘lmagan Telnet, rlogin va rsh kabi eski protokollarning o‘rnini egallagan. U serverni kriptografik host key orqali tekshiradi, foydalanuvchini autentifikatsiya qiladi va sessiya ma’lumotini shifrlaydi.

SSH odatda TCP 22-portda ishlaydi, lekin boshqa portga sozlanishi mumkin.

SSH qatlamlari

SSH protokoli uch asosiy qismga bo‘linadi.

Transport layer

Transport qatlami:

mexanizmlarini boshqaradi.

User authentication

Foydalanuvchini tasdiqlaydi.

Usullar:

  • parol;
  • public key;
  • keyboard-interactive;
  • host-based;
  • GSSAPI;
  • multi-factor kombinatsiya.

Connection protocol

Bitta SSH transporti ichida bir nechta mantiqiy kanal ochadi.

Kanallar:

  • interactive shell;
  • command execution;
  • SFTP;
  • port forwarding;
  • agent forwarding;
  • X11 forwarding.

Ulanish bosqichlari

SSH sessiyasi quyidagi tartibda shakllanadi:

  1. TCP ulanish ochiladi.
  2. Client va server SSH versiya satrini almashadi.
  3. Algoritmlar ro‘yxati kelishiladi.
  4. Key exchange bajariladi.
  5. Server host key bilan o‘zini isbotlaydi.
  6. Shifrlangan kanal ishga tushadi.
  7. Foydalanuvchi autentifikatsiyadan o‘tadi.
  8. Shell yoki boshqa kanal ochiladi.

Key exchange har sessiya uchun yangi simmetrik kalit hosil qiladi.

Host key

Host key serverning uzoq muddatli identifikatori.

Serverda quyidagi turdagi host keylar bo‘lishi mumkin:

Client host key fingerprintini known_hosts faylida saqlaydi.

Keyingi ulanishda server boshqa kalit ko‘rsatsa, client ogohlantiradi. Bunga sabab:

Kalit o‘zgarishi tekshirilmasdan qabul qilinmaydi.

Key exchange

Key exchange client va serverga ochiq tarmoq orqali umumiy sir hosil qilish imkonini beradi.

Keng tarqalgan usullar:

  • Curve25519;
  • elliptic-curve Diffie–Hellman;
  • Diffie–Hellman guruhlari.

Key exchange natijasida session keylar hosil bo‘ladi. Keyinchalik katta ma’lumot simmetrik shifrlash bilan tez uzatiladi.

Forward secrecy beradigan algoritmlarda serverning uzoq muddatli private host keyi keyin o‘g‘irlansa ham, oldingi sessiya trafikini avtomatik ochib bo‘lmaydi.

Shifrlash va yaxlitlik

SSH quyidagi toifadagi algoritmlarni kelishadi:

Zamonaviy AEAD cipher bir vaqtning o‘zida shifrlash va yaxlitlikni ta’minlaydi.

Eski algoritmlar:

  • 3DES;
  • arcfour;
  • CBCning ayrim variantlari;
  • SHA-1 asosidagi eski imzolar

xavfsizlik siyosatida o‘chirilishi mumkin.

Parol autentifikatsiyasi

Parol SSHning shifrlangan kanali ichida yuboriladi. Shu sababli tarmoqda ochiq ko‘rinmaydi.

Biroq parolga quyidagi xavflar mavjud:

  • brute force;
  • credential stuffing;
  • phishing;
  • zaif parol;
  • bir xil parolni qayta ishlatish;
  • serverdagi zararli kod.

Internetga ochiq SSH serverda parol login ko‘pincha cheklanadi yoki MFA bilan birlashtiriladi.

Public key autentifikatsiyasi

Client private keyga, server esa mos public keyga ega bo‘ladi.

Serverdagi fayl:

~/.ssh/authorized_keys

Client server yuborgan challengega private key bilan imzo qo‘yadi. Private key serverga yuborilmaydi.

Afzalliklari:

  • kuchli kriptografik autentifikatsiya;
  • avtomatlashtirish;
  • parol brute force xavfini kamaytirish;
  • kalitga alohida restriction qo‘yish.

Private key passphrase bilan himoyalanishi mumkin.

authorized_keys cheklovlari

Public key qatoriga qo‘shimcha optionlar yozish mumkin:

  • faqat ma’lum IPdan kirish;
  • faqat ma’lum command;
  • port forwardingni taqiqlash;
  • agent forwardingni taqiqlash;
  • PTY bermaslik;
  • environment cheklash.

Bu backup yoki deployment kalitini to‘liq shell accessdan ajratishga yordam beradi.

SSH agent

SSH agent private keyni xotirada saqlaydi va client so‘roviga imzo qo‘yadi.

Afzalligi:

  • passphrase har ulanishda kiritilmaydi;
  • private key fayli har jarayonga berilmaydi;
  • bir nechta SSH sessiyasi qulaylashadi.

Agent forwarding masofaviy serverga lokal agentdan foydalanish imkonini beradi. Private key serverga ko‘chmaydi, ammo komprometatsiya qilingan server agent orqali imzo so‘rashi mumkin.

Interactive shell

SSH orqali foydalanuvchi masofaviy shell oladi.

Terminal funksiyalari:

ssh -t PTY ajratishni majburlashi mumkin. Binary ma’lumot uzatishda PTY keraksiz va zararli bo‘lishi mumkin.

Masofaviy buyruq

Shell ochmasdan bitta buyruq bajarish mumkin:

ssh user@server 'systemctl status nginx'

Natija stdout va stderr orqali clientga qaytadi.

Avtomatlashtirishda:

  • shell quoting;
  • exit code;
  • environment;
  • PATH;
  • sudo;
  • timeout

hisobga olinadi.

Local port forwarding

Local forwarding lokal portni masofadagi xizmatga tunnel qiladi.

ssh -L 15432:db.internal:5432 user@gateway

Lokal 127.0.0.1:15432ga ulanish SSH tunnel orqali db.internal:5432ga yetadi.

Bu ichki databasega gateway orqali xavfsiz kirish uchun ishlatiladi.

Remote port forwarding

Remote forwarding server tomondagi portni client tomondagi xizmatga bog‘laydi.

ssh -R 9000:localhost:3000 user@server

Serverdagi 9000-port orqali clientdagi 3000-portga yetish mumkin.

Qaysi interfeysda tinglashi GatewayPorts va server siyosatiga bog‘liq.

Dynamic forwarding

Dynamic forwarding SOCKS proxy yaratadi.

ssh -D 1080 user@gateway

SOCKSni qo‘llaydigan ilova turli destinationlarga SSH tunnel orqali ulanadi.

Bu VPNning to‘liq o‘rnini bosmaydi. Faqat proxyga sozlangan trafik tunnelga tushadi.

Jump host

Ichki serverga bevosita ulanish bo‘lmasa, bastion yoki jump host ishlatiladi.

ssh -J bastion.example.uz user@internal-server

Client bastion orqali ichki serverga kanal ochadi.

Jump hostda:

muhim.

SSH config

Takroriy parametrlar ~/.ssh/config faylida saqlanadi.

Host internal
    HostName 10.10.20.15
    User farrukh
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ProxyJump bastion.example.uz

Keyin:

ssh internal

yetarli bo‘ladi.

Serverni mustahkamlash

SSH serverda quyidagilar qo‘llanadi:

  • root loginni cheklash;
  • parol loginni o‘chirish yoki MFA;
  • faqat kerakli userlar;
  • eski algoritmlarni o‘chirish;
  • login rate limit;
  • firewall;
  • fail2ban kabi nazorat;
  • audit log;
  • least privilege;
  • kalit rotatsiyasi;
  • host key backup;
  • port forwarding siyosati.

Portni o‘zgartirish tasodifiy skanlarni kamaytirishi mumkin, lekin asosiy xavfsizlik mexanizmi emas.

Diagnostika

SSH ulanishda -v, -vv yoki -vvv debug rejimi ishlatiladi.

Tekshiruvlar:

Permission denied qaysi autentifikatsiya usullari sinab ko‘rilgani bilan birga tahlil qilinadi.

Bog‘liq tushunchalar

Remote shell, OpenSSH, Public key, Private key, Host key, Key exchange, Port forwarding, SFTP, SCP, PTY, Bastion host