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 Communications Security, якая з'яўляецца стоадсоткавым падраздзяленнем карпарацыі Tectia, яна бясплатная для некамерцыйнага ўжывання. Гэтыя рэалізацыі змяшчаюць практычна аднолькавы набор каманд.

Пратакол SSH-1, у адрозненне ад пратакола telnet, устойлівы да атакі праслухоўвання трафіку («sniffing»), але няўстойлівы да атак «чалавек пасярэдзіне». Пратакол SSH-2 таксама ўстойлівы да атак праз далучэнне ўсярэдзіне (), бо немагчыма далучыцца ва ўжо ўсталяваную сесію ці перахапіць яе.

Дзеля прадухілення атакі «чалавек пасярэдзіне» пры далучэнні да хоста, ключ якога яшчэ невядомы кліенту, кліенцкае ПЗ паказвае карыстальніку «адбітак ключа» (). Пажадана дасканала спраўдзіць паказаны кліенцкім ПЗ «адбітак ключа» з адбіткам ключа сервера, атрыманым праз надзейныя каналы сувязі альбо асабіста. 

Падтрымка SSH рэалізавана ва ўсіх UNIX‑падобных сістэмах, і ў большасці з іх сярод стандартных утыліт прысутнічаюць кліент і сервер ssh. Існуе мноства рэалізацый SSH-кліентаў і для не-UNIX АС. Вялікую папулярнасць пратакол набыў пасля паўсюднага развіцця аналізатараў трафіку і спосабаў парушэння працы лакальных сетак, як альтэрнатыва ненадзейнаму пратаколу Telnet для кіравання важнымі вузламі.

Для работы праз SSH патрэбны SSH-сервер і SSH-кліент. Сервер праслухоўвае злучэнні ад кліенцкіх машын і пры ўсталяванні сувязі здзяйсняе аўтэнтыфікацыю, пасля чаго пачынае абслугоўванне кліента. Кліенцкая праграма ўжываецца для ўваходу на аддаленую машыну і выканання каманд.

Для злучэння сервер і кліент павінны стварыць пары ключоў — адкрытых і закрытых — і абмяняцца адкрытымі ключамі.
Звычайна ўжываецца таксама і пароль.

### SSH-серверы 
* *BSD: OpenSSH
* Linux: dropbear, lsh-server, openssh-server, ssh, Tectia SSH (SSH Communications Security) Server
* Windows: freeSSHd, copssh, WinSSHD, KpyM Telnet/SSH Server, MobaSSH, OpenSSH праз Cygwin, Tectia SSH (SSH Communications Security) Server

### SSH-кліенты і абалонкі 
* GNU/Linux, *BSD: kdessh, lsh-client, openssh-client, putty, ssh, Vinagre, Tectia SSH (SSH Communications Security) Client
* MS Windows и Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD, XShell, Tectia SSH (SSH Communications Security) Client
* MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole, Tectia SSH (SSH Communications Security) Client
* Mac OS: NiftyTelnet SSH
* Symbian OS: PuTTY
* Java: MindTerm, AppGate Security Server
* J2ME: MidpSSH
* iPhone: i-SSH, ssh (у камплекце з Terminal)
* Android: connectBot, Server Auditor, JuiceSSH.
* Blackberry: BBSSH
* MAEMO 5: OpenSSH
* MeeGo 1.2 Harmattan: OpenSSH

## Парады бяспекі для ўжывання *SSH* 
# Забарона аддаленага *root*-доступу.
# Забарона далучэння з пустым паролем ці выключэнне ўваходу праз пароль.
# Выбар нестандартнага порта для *SSH*-сервера.
# Ужыванне доўгіх *SSH2 RSA*-ключоў (2048 біт і болей). Сістэмы шыфравання на аснове *RSA* лічацца надзейнымі, калі даўжыня ключа не менш за 1024 біт.
# Абмежаванне спісу IP-адрасоў, з якіх дазволены доступ (напрыклад, наладкай файрвола).
# Забарона доступу з некаторых патэнцыйна небяспечных адрасоў.
# Адмова ад ужывання распаўсюджаных ці шырока вядомых сістэмных лагінаў для доступу праз *SSH*.
# Рэгулярны прагляд паведамленняў аб памылках аўтэнтыфікацыі.
# Усталяванне сістэмы выяўлення ўварвання *(IDS)*.
# Выкарыстанне пастак, якія падрабляюць *SSH*-сэрвіс *(honeypot)*.

## Прыклад выкарыстання SSH 
Каманда далучэння да лакальнага SSH-сервера з каманднага радка GNU/Linux альбо FreeBSD для карыстальніка pacify (сервер слухае нестандартны порт 30000):

 $ ssh -p 30000 pacify@127.0.0.1

Генераванне пары ключоў (у UNIX-падобных АС) здзяйсняецца камандай 

 $ ssh-keygen

Генераванне пары SSH-2 RSA-ключоў даўжынёй 4096 біт праграмай puttygen у UNIX‐падобных АС:

 $ puttygen -t rsa -b 4096 -o sample

Некаторыя кліенты, напрыклад, PuTTY, маюць таксама графічны інтэрфейс карыстальніка.

Для карыстання SSH у Python існуюць такія модулі, як python-paramiko і python-twisted-conch.

## SSH-тунэляванне 
SSH-тунэль — гэта сеткавае злучэнне, створанае праз SSH-злучэнне і ўжыванае для шыфравання тунэляваных даных. Выкарыстоўваецца дзеля таго, каб схаваць перадачу даных у Інтэрнэце (аналагічнае прызначэнне мае IPsec). Пры перасылцы праз SSH-тунэль зыходны трафік любога пратаколу шыфруецца на адным канцы SSH-злучэння і расшыфроўваецца на другім.

Практычная рэалізацыя можа выконвацца некалькімі спосабамі:
* Стварэнне Socks-проксі для праграм, якія не здольны працаваць праз SSH-туннэль, але могуць працаваць праз Socks-проксі
* Выкарыстанне праграм, якія здольны працаваць праз SSH-тунэль.
* Стварэнне VPN-тунэлю, прыдатнае амаль для любых праграм.
* Калі праграма працуе з адным пэўным серверам, можна наладзіць SSH-кліент такім чынам, каб ён прапускаў праз SSH-тунэль TCP-злучэнні, якія прыходзяць на пэўны TCP-порт машыны, на якой запушчаны SSH-кліент. Напрыклад, кліенты Jabber далучаюцца па-змоўчванню на порт 443. Каб наладзіць далучэнне да сервера Jabber праз SSH-тунэль, SSH-кліент наладжваецца на перанакіраванне далучэнняў с любога порта лакальнай машыны (напрыклад, з порту 4430) на аддалены сервер (напрыклад, jabber.example.com і порт 443):

```bash
$ ssh -L 4430:jabber.example.com:443 somehost
```
У дадзеным выпадку Jabber-кліент наладжваецца на далучэнне да порта 4430 сервера localhost (калі ssh-кліент запушчаны на той жа машыне, што і Jabber-кліент).
Для стварэння ssh-тунэля патрэбна машына з запушчаным ssh-серверам і доступам да jabber.example.com. Такая канфігурацыя можа ўжывацца ў выпадку, калі з лакальнай машыны доступ да jabber.example.com зачынены файрволам, але ёсць доступ да пэўнага ssh-сервера, у якога абмежаванні доступу ў Інтэрнэт адсутнічаюць.

## Тэхнічная інфармацыя аб пратаколе 
SSH — гэта пратакол прыкладнога ўзроўню. SSH-сервер звычайна чакае злучэння на TCP-порт 22. Спецыфікацыя пратакола SSH-2 змяшчаецца ў RFC 4251. Для аўтэнтыфікацыі сервера ў SSH ужываецца пратакол аўтэнтыфікацыі бакоў на аснове алгарытмаў электронна-лічбавага подпісу RSA альбо DSA. Для аўтэнтыфікацыі кліента таксама можа выкарыстоўвацца ЭЛП RSA альбо DSA, але дапускаецца таксама аўтэнтыфікацыя з дапамогай паролю (рэжым зваротнай сумяшчальнасці з Telnet) і нават ip-адраса хоста (рэжым зваротнай сумяшчальнасці з rlogin). Аўтэнтыфікацыя паролем найбольш распаўсюджана; яна бяспечная, бо пароль перадаецца праз шыфраваны віртуальны канал. Аўтэнтыфікаыя ip-адрасам небяспечная, гэтую магчымасць часцей за ўсю выключаюць. Для стварэння агульнага сакрэту (сеансавага ключа) ужываецца алгарытм Дыфі — Хелмана (DH). Для шыфравання перадаванай інфармацыі ўжываецца сіметрычнае шыфраванне, алгарытмы AES, Blowfish ці 3DES. Цэльнасць перадаванай інфармацыі спраўджваецца праз CRC32 у SSH1 ці HMAC-SHA1/HMAC-MD5 у SSH2.

Для сціскання шыфраванай інфармацыі можа ўжывацца алгарытм 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-кліент
* https://serverauditor.com/  - папулярны мабільны кросплатформавы SSH-кліент (Android, iOS)
* параўнанне SSH-кліентаў

;Праграмы доступу да файлаў:
* WinSCP — SFTP-кліент для Microsoft Windows

;Іншае:
* Уразлівасць у SSH 
* Тэорыя і практыка карыстання SSH
* Analyzing Malicious SSH Login Attempts 
* Каманды Linux / SSH

Катэгорыя:Крыптаграфія
Катэгорыя:Unix
Катэгорыя:Тэкставы інтэрфейс
Катэгорыя:Інтэрнэт-пратаколы