SSH

**SSH** ( — «қауіпсіз қабықша») — операциялық жүйені қашықтан басқаруға және TCP-байланыстарды туннельдеуге (мысалы, файлдарды тасымалдау үшін) мүмкіндік беретін сеанстық деңгейдегі желілік протокол. Қызметі жағынан Telnet және rlogin протоколдарымен ұқсас болғанымен, олардан айырмашылығы - барлық трафикті, парольдерді шифрлейді. SSH әртүрлі шифрлеу алгоритмдерін таңдауға мүмкіндік береді. Желілік операциялық жүйелердің басым көпшілігінде SSH-клиенттер және SSH-серверлер бар.

SSH қорғалмаған ортада басқа кез келген желілік протоколды тасымалдауға мүмкіндік береді, осылайша, қашықтағы компьютермен командалық қабықша арқылы ғана емес, сонымен қатар, шифрленген арна арқылы дыбыс ағынын немесе бейнені (мысалы, веб-камерадан) тасымалдауға болады . Сонымен қатар, SSH тасымалданатын мәліметтерді шифрлеу алдында сыға алады, бұл мүмкіндік X Window System клиенттерін қашықтан қосуға ыңғайлылық тудырады.

Көптеген хостинг-провайдерлер клиенттерге олардың үй каталогымен SSH арқылы жұмыс жасауға мүмкіндік береді. Бұл мүмкіндікті пайдаланатын клиенттер бұйрықтық қатармен жұмыс жасауды жеңілдетіп қана қоймай, бағдарламаларды (графикалық бағдарламаларды қоса алғанда) қашықтан іске қосуға мүмкіндік алады.

## Стандарттары және бағдарламалық жүзеге асырылуы

Протоколдың алғашқы нұсқасын (SSH-1 атына ие болған) 1995 жылы Финляндиялық Хельсинки Технологиялық университетінің зерттеушісі Тату Улёнен ойлап тапқан. SSH-1 протоколы rlogin, telnet және rsh протоколдарына қарағанда құпиялылықты жоғары сақтай алатын еді. 1996 жылы протоколдың қауіпсіздеу нұсқасы SSH-2 жасап шығарылды, ол SSH-1 протоколымен сәйкес жұмыс жасай алмады. Протокол кеңінен таралып, 2000 жылы оның екі миллионға жуық пайдаланушысы болды. Қазіргі кезде "SSH" термині көбіне SSH-2 протоколына қатысты айтылады, себебі протоколдың алғашқы нұсқасы өз кемшіліктеріне байланысты қазіргі кезде тіпті қолданылмайды десе де болады.

2006 жылы бұл протокол IETF жұмыс тобымен Интернет‐стандарт ретінде бекітілді.

Алайда, кейбір мемлекеттерде (Франция, Ресей, Ирак және Пәкістан) шифрлеудің белгілі бір тәсілдерін қолдану үшін қажетті құрылымдардан арнайы рұқсат алу керек, бұл тәсілдер ішінде SSH да бар. Ресей Федерациясының «О федеральных органах правительственной связи и информации» заңын қараңыз.

SSH протоколының екі нұсқасы кең тараған: жеке коммерциялық және тегін. Тегін реализация OpenSSH деп аталады. 2006 жылы Интернет желісінің 80 % компьютерлері OpenSSH қолданды. Коммерциялық нұсқаны жасаумен SSH Inc. ұйымы айналысады, бұл нұсқаны да коммерциялық емес мақсаттарда тегін қолдануға болады. Бұл нұсқалардағы бұйрықтар тізімі шамамен бірдей.

Іс жүзінде, көптеген хакерлер желідегі, әсіресе хостинг-провайдерлердің адрестеріндегі ашық SSH-портының бар-жоғын тексереді де, сосын суперпайдаланушының паролін табуға тырысады.

Telnet протоколына қарағанда, SSH-2 протоколы трафикті зерттеу шабуылдарына ("снифинг") төтеп бере алғанымен, «man-in-middle» шабуылдары кезінде тұрақсыз болып табылады. SSH-2 протоколы, сонымен қатар, орта жолдан қосылу арқылы шабуылдауға да () төзімді - орнатылып қойылған сессияға орта жолдан кіруге немесе оны тартып алуға мүмкіндік жоқ.

«man-in-middle» шабуылдарына тойтарыс беру үшін, клиентке кілті әзір белгісіз хостқа қосылған кезде, клиенттік бағдарламалық жабдық пайдаланушыға "кілт бастырмасын" (key fingerprint) көрсетеді. Клиенттік бағдарламалық жабдық көрсетіп отырған "кілт бастырмасын" (key fingerprint) серверлік кілттің бастырмасымен салыстырып отырған дұрыс. Серверлік кілт бастырмасын байланыстың сенімді желілері арқылы немесе жеке өз қолыңызға алып тексерген дұрыс.

SSH қолдауы барлық UNIX‑типтес жүйелерде жүзеге асырылған, олардың басым көпшілігінде стандартты утилитилар арасында ssh клиенті және сервері бар. SSH-клиенттердің UNIX типтес емес операциялық жүйелер үшін де клиенттері көп. Бұл протокол трафик талдаушылары және локальді желінің жұмысын бұзудың тәсілдерінің кең тарауынан кейін, қауіпсіз емес Telnet протоколына альтернатива ретінде пайдаланылып, кеңінен тарады.

SSH арқылы жұмыс жасау үшін SSH-сервер және SSH-клиент қажет. Сервер клиенттік машиналардан келіп түскен байланыстарды тыңдап отырады да, байланыс орнатылған кезде аутентификация жасайды, одан соң клиентке қызмет көрсете бастайды. Клиент қашықтағы машинаға кіру және бұйрықтарды орындау үшін қолданылады.

Байланыс орнату үшін, сервер және клиенттің әрқайсысы кілттер жұбын - ашық және жабық - құрып, ашық кілттерімен алмасулары керек. Әдетте пароль де қолданылады.

### SSH-серверлер
* *BSD: OpenSSH
* Linux: dropbear, lsh-server, openssh-server, ssh
* Windows: freeSSHd, copssh , OpenSSH sshd, WinSSHD, KpyM Telnet/SSH Server , MobaSSH, Cygwin

### SSH-клиенттер және қабықшалар
* GNU/Linux, *BSD: kdessh, lsh-client, openssh-client, putty, ssh
* MS Windows и Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD
* MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole
* Mac OS: NiftyTelnet SSH
* Symbian OS: PuTTY
* Java: MindTerm, AppGate Security Server
* J2ME: MidpSSH
* iPhone: i-SSH, ssh (в комплекте с Terminal)
* Android: connectBot
* Blackberry: BBSSH

## SSH қолдану қауіпсіздігі жайында кеңестер

# Қашықтан root-байланыс орнатуға тыйым салу.
# Бос парольмен кіруге немесе тіпті парольмен кіруге тыйым салу.
# SSH-сервер үшін стандартты емес порт таңдау.
# Ұзын SSH2 RSA-кілттерді (2048 бит және одан да көп) қолдану. Егер кілттің ұзындығы 1024 биттен кем болмаса, RSA негізіндегі шифрлеу жүйелері сенімді болып саналады.
# Қашықтан кіре алатын IP-адрестер тізімін шектеу (мысалы, файрвол көмегімен).
# Кейбір қауіпті болуы мүмкін адрестерден кіруге тыйым салу.
# SSH жүйесіне кіруге кеңінен қолданылатын немесе бәріне белгілі логиндерді қолданудан бас тарту.
# Аутентификация қателері туралы жазбаларды тұрақты түрде қарап отыру.
# Шабуылдарды анықтау жүйелерін орнату (IDS, Intrusion Detection System).
# Өтірік SSH-сервис құратын тұзақтарды қолдану (honeypots).

## SSH қолдану мысалдары

Локальді SSH-серверге GNU/Linux немесе FreeBSD жүйелерінің бұйрықтық қатарынан pacify пайдаланушысы арқылы кіру (сервер стандартты емес 30000 портын қолданады):

 $ ssh -p 30000 pacify@127.0.0.1

UNIX-типтес жүйелерде puttygen бағдарламасы көмегімен ұзындығы 4096 бит болатын SSH-2 RSA-кілттерін генерациялау:

 $ puttygen -t rsa -b 4096 -o sample

Кейбір клиенттер, мысалы, PuTTY, пайдаланушының графикалық интерфейсін де қолданады.

SSH протоколын Python жүйесінде қолдану үшін python-paramiko және python-twisted-conch модульдері бар.

## SSH-туннельдеу

SSH-туннель — бұл SSH-байланыс көмегімен құрылған, мәліметтерді шифрлеуге арналған туннель. Интернетте мәлімет тасымалдау қауіпсіздігін арттыру үшін қолданылады (IPsec секілді мақсатта қолдану). Ерекшелігі - белгілі бір протоколдың шифрленбеген трафигі SSH-байланыстың бір шетінде шифрленіп, екінші шетінде қайта дешифрленеді.

Бұл екі түрлі тәсілмен жүзеге асады:
* SSH-туннель арқылы жұмыс жасай алмайтын, бірақ Socks-прокси арқылы жұмыс жасай алатын бағдарламалар үшін Socks-прокси құру.
* SSH-туннель арқылы жұмыс жасай алатын бағдарламаларды қолдану.

## Протокол туралы техникалық ақпарат

SSH — бұл қолданбалы деңгей (бағдарламалық деңгей) протоколы. SSH-сервер әдеттен 22-ші TCP-портқа келген байланыстарды күтіп отырады. SSH-2 протоколының спецификациясы RFC 4251 құжатында көрсетілген. Серверді аутентификациялау үшін SSH протоколында RSA немесе DSA электрондық-цифрлық қолтаңбасы алгоритмдері негізіндегі аутентификация протоколы қолданылады. Клиентті аутентификациялау үшін де RSA немесе DSA ЭЦҚ, сонымен қатар, пароль (Telnet протоколымен сәйкестік) және тіпті хосттың ip-адресі (rlogin протоколымен сәйкестік) қолданылуы мүмкін. Пароль бойынша аутентификациялау кеңінен таралған; ол қауіпсіз болып табылады, себебі пароль шифрленгене виртуалды арна арқылы тасымалданады.

IP-адрес бойынша аутентификациялау қауіпсіз емес болып табылады, бұл мүмкіндікті әдетте ажыратып тастаған дұрыс. Ортақ құпияны (сеанстық кілтті) құру үшін Диффи — Хеллман алгоритмі (DH) қолданылады. Тасымалданатын мәліметтерді шифрлеу үшін симметрлі шифрлеудің AES, Blowfish немесе 3DES алгоритмдері қолданылады. Тасымалданған мәліметтердің дұрыстығы SSH1 жүйесінде CRC32 арқылы немесе SSH2 жүйесінде HMAC-SHA1/HMAC-MD5 арқылы тексеріледі.

Шифрленген мәліметтерді сығу үшін LempelZiv (LZ77) алгоритмі қолданылады. Бұл алгоритм ZIP архиваторымен шамалас сығу деңгейіне ие. SSH сығуы клиенттің сұранысы бойынша іске қосылады да, іс жүзінде сирек қолданылады.

## Тағы да қараңыз
* SFTP
* SCP
* SSL
* TLS

## Ескертулер

## Сілтемелер
;Стандарттар:
* RFC 4250  — The Secure Shell (SSH) Protocol Assigned Numbers
* RFC 4251  — The Secure Shell (SSH) Protocol Architecture
* RFC 4252  — The Secure Shell (SSH) Authentication Protocol
* RFC 4253  — The Secure Shell (SSH) Transport Layer Protocol
* RFC 4254  — The Secure Shell (SSH) Connection Protocol
* RFC 4255  — Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
* RFC 4256  — Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)
* RFC 4335  — The Secure Shell (SSH) Session Channel Break Extension
* RFC 4344  — The Secure Shell (SSH) Transport Layer Encryption Modes
* RFC 4345  — Improved Arcfour Modes for the Secure Shell (SSH) Transport Layer Protocol
* RFC 4419  — Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol
* RFC 4432  — RSA Key Exchange for the Secure Shell (SSH) Transport Layer Protocol
* RFC 4716  — The Secure Shell (SSH) Public Key File Format

;SSH-клиенттер:
* OpenSSH — тегін кітапхана және шифрлеуді қолдайтын утилиталар жиыны
* PuTTY — кең тараған кроссплатформалық SSH-клиент
* SSH-клиенттерді салыстыру
* MidpSSH   — ұялы телефондарға арналған SSH-клиент.

;Файлдармен жұмыс жасауға арналған бағдарламалар:
* FTP Commander Deluxe — кең тараған бағдарлама, барлық қауіпсіз протоколдарды қолдайды
* WinSCP — Microsoft Windows жүйесіне арналған SFTP-клиент
* SftpDrive  — Microsoft Windows жүйесіне арналған SFTP-клиент
* SSH Filesystem  — қашықтағы машинадағы ssh бойынша жұмыс жасауға болатын директорияны GNU/Linux жүйелерінде локальді директория ретінде қосып береді.

;Қосымша:
* WebSSH
* GNU/Linux жүйелерінде SSH протоколын қорғау 
* SSH жүйесіндегі әлсіздік 
* SSH жүйесін қолдану теориясы және практикасы
* Windows жүйесіндегі SSH
* Analyzing Malicious SSH Login Attempts 
* Linux / SSH бұйрықтары
* Администраторға арналған SSH

Санат:URI
Санат:Криптография
Санат:UNIX
Санат:Мәтіндік интерфейс
Санат:Интернет-протоколдар