SSH
Дата створення / заснування 1995
Зображення
Похідна робота SFTP, SCP і Ssh-keygen
Творець Тату Ілонен
Ліцензія GNU Lesser General Public License
Порт 22[1], 22[1] і 22[1]
CMNS: SSH у Вікісховищі
Ця стаття потребує істотної переробки. Можливо, її необхідно доповнити, переписати або вікіфікувати. Пояснення причин та обговорення — на сторінці Вікіпедія: Статті, що необхідно поліпшити. Тому, хто додав шаблон: зважте на те, щоб повідомити основних авторів статті про необхідність поліпшення, додавши до їхньої сторінки обговорення такий текст: ((subst:поліпшити автору|SSH|1 листопада 2021)) ~~~~, а також не забудьте описати причину номінації на підсторінці Вікіпедія:Статті, що необхідно поліпшити за відповідний день. (1 листопада 2021)
Ця стаття є сирим перекладом з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. Будь ласка, допоможіть поліпшити переклад. (листопад 2013)

Secure Shell, SSH (англ. Secure Shell — «безпечна оболонка»[2]) — мережевий протокол прикладного рівня, що дозволяє проводити віддалене управління комп'ютером і тунелювання TCP-з'єднань (наприклад, для передачі файлів). Схожий за функціональністю з протоколом Telnet і rlogin, проте шифрує весь трафік, включаючи процес аутентифікацій та передачу паролів та секретів. SSH це клієнт-серверний протокол. Програмне забезпечення яке реалізує як клієнтську, так і серверну частину реалізовано для всіх дуже широкого діапазону сучасних операційних систем. Для UNIX-like операційних систем протокол SSH вважається стандартом віддаленого адміністрування.

Протокол SSH окрім основного призначення - безпечного віддаленого доступу до комп'ютера, та передачі файлів, володіє потужними можливостями тунелювання, через зашифрований канал SSH можна передавати інші дані, інкапсулюючи їх у TCP-з'єднання. Основні можливості це проксування локальних та віддалених TCP-портів (Port Forwarding), тунелювання дисплею для графічних застосунків при використанні X Window System (X Tunnelling). Можливо навіть передавати звук через шифрований канал, втім SSH може використовуватися для тунелювання будь-якого іншого мережевого протоколу, який може бути представлений у вигляді TCP-з'єднання.

Стандарти та програмні реалізації

[ред. | ред. код]

Версія 1

[ред. | ред. код]

Широкий розвиток сніферів створив проблему утиліт rlogin, telnet і rsh у зв'язку з тим що протокол телнет прозорий, що вимагало вирішення проблеми безпечного використання програмного забезпечення для віддаленого адміністрування.

Перша версія протоколу, SSH, була розроблена в 1995 році дослідником Тату Ілоненом з Технологічного університету Гельсінкі, Фінляндія. SSH був написаний для забезпечення більшої конфіденційності ніж telnet. Для свого проєкту він запросив у IANA tcp-порт 22[3], тому що той знаходиться між 21 для ftp та 23 для telnet.

Перша версія вийшла в реліз в липні 1996 як безкоштовне програмне забезпечення , та швидко отримала популярність. В грудні 1995 року Ілонен заснував SSH Communication Security (SCS) для розробки SSH. Оригінальна перша версія використовувала вільне програмне забезпечення, наприклад GNU libgmp, проте SSH Communication Security замінив такі бібліотеки щоб розробляти власницьке програмне забезпечення.

Протокол набув ще більшої популярності, і до 2000 року у нього було близько двох мільйонів користувачів.

Версія 2

[ред. | ред. код]

В 1996 році SCS розробив версію протоколу SSH-2, яка містить нові алгоритми, та вирішувала деякі архітектурні проблеми першої версії SSH-1, проте SSH-2 була не була сумісна з версією SSH-1. Ілонен описує та пропонує SSH-1 інженерній групі з питань інтернету (IETF), а в 1996 SCS пропонує SSH2. У відповідь IETF створює робочу групу SECSH.

В 1998 році SCS випускає програмний продукт SSH Secure Shell (SSH2) на базі протоколу SSH-2, проте перехід відбувається повільно тому що користувачі не розуміють чим він краще, а також деяких користувачам заважають проприєтарні умови ліцензування програмного продукту. Проте коли проект OpenBSD реалізує версію протоколу SSH2 - OpenSSH під вільною ліцензією, то він портується на інші UNIX-подібні операційні системи та швидко завойовує популярність.[4]

У 2006 році протокол SSH2 був затверджений робочою групою IETF як Інтернет-стандарт[5]. Ця версія не сумісна з SSH-1, але має покращену безпеку та нові можливості. Дизайн протокол почав використовувати поліпшену багатошарову архітектуру, в якій протокол розділений на окремі рівні, подібно до протоколу ISO/OSI[6]. Підтримуються нові механізми обміну ключами по протоколу Діффі-Геллмана, покращена цілісність, завдяки MAC-підписам. Нові можливості SSH-2 передбачають можливість отримувати декілька віртуальних терміналів на одному SSH з'єднанні[7].

Версія 1.99

[ред. | ред. код]

У січні 2006 року, вже після затвердження та впровадження SSH-2 версії 2.1 був створений RFC 4253. Його мета забезпечення зворотної сумісності старим клієнтам для роботи з сервером, що підтримує протокол SSH-2, в такому випадку сервер себе позначає що версія протоколу 1.99.[8]

OpenSSH і OSSH

[ред. | ред. код]

У 1999 році розробники, бажали повернутися до старої 1.2.12 реалізовуючи оригінальну SSH програму, яка була останньою випущена під з відкритим вихідним кодом ліцензію. OSSH Björn Grönvall згодом почав розвиватися з цього коду.

Відомі вразливості

[ред. | ред. код]

У 1998 році була описана вразливість в SSH 1.5. Вона дозволяла несанкціоновану вставки даних в зашифрованому потоці SSH через недостатню цілісності даних захист від CRC-32 використовується в даній версії протоколу.[9][10].

У січні 2001 року була виявлена ​​уразливість, яка дозволяє зловмисникові змінювати останній блок IDEA. Зашифровані сесії[11] У тому ж місяці, інша уразливість була виявлена, що дозволяло шкідлививому серверу пересилання автентифікації клієнта на інший сервер.[12]

Так як SSH-1 притаманні недоліки дизайну, які роблять його вразливим, в даний час він вважається застарілим і його слід уникати, відключивши повернення до SSH-1. Більшість сучасних серверів і клієнтів підтримують SSH-2.

У листопаді 2008 року теоретичну вразливість була виявлена ​​для всіх версій SSH, який дозволив відновлення до 32 біт відкритого тексту з блоку зашифрованого тексту, зашифрованого за допомогою тодішнього стандартного режиму шифрування за умовчанням[13].

Сервери

[ред. | ред. код]
BSD
OpenSSH
Linux
dropbear, lsh-server, openssh-server, ssh
Windows
freeSSHd, copssh, WinSSHD, KpyM Telnet / SSH Server, MobaSSH, OpenSSH через Cygwin, DenWer

Клієнти та оболонки

[ред. | ред. код]

Використання

[ред. | ред. код]
Цей розділ потребує доповнення.

Приклади

[ред. | ред. код]

Команда підключення до локального SSH-сервера з командного рядка GNU/Linux або FreeBSD для користувача user (сервер прослуховує нестандартний порт 30000):

$ ssh -p 30000 user@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

[ред. | ред. код]

Є кілька механізмів передачі файлів за допомогою захищених протоколів Shell.

SSH-тунелювання

[ред. | ред. код]

SSH-тунель — це тунель, який створюється за допомогою SSH-з'єднання і використовується для шифрування тунельованих даних. Використовується для того, щоб убезпечити передачу даних в Інтернеті (аналогічне призначення має IPsec). Особливість полягає в тому, що незашифрований трафік будь-якого протоколу шифрується на одному кінці SSH-з'єднання і розшифровується на іншому.

Практична реалізація може виконуватися декількома способами:

Якщо програма працює з одним певним сервером, можна налаштувати SSH-клієнт таким чином, щоб він пропускав через SSH-тунель TCP-з'єднання, що приходять на певний TCP-порт машини, на якій запущений SSH-клієнт. Наприклад, клієнти Jabber підключаються по замовчуванню на порт 443. Тоді, щоб налаштувати підключення до сервера Jabber через SSH-тунель, SSH-клієнт налаштовується на перенаправлення підключень з будь-якого порту локальної машини (наприклад, з порту 4430) на віддалений сервер (наприклад, jabber.example.com і порт 443):

$ ssh -L 4430:jabber.example.com:443 somehost

В даному випадку Jabber-клієнт налаштовується на підключення до порту 4430 сервера localhost (якщо ssh-клієнт запущений на тій же машині що і Jabber-клієнт).

Для створення ssh-тунелю необхідна машина з запущеним ssh-сервером і доступом до jabber.example.com. Така конфігурація може використовуватися у випадку, якщо з локальної машини доступ до jabber.example.com закритий фаєрволом, але є доступ до деякого ssh-серверу, у якого обмеження доступу в Інтернет відсутні.

Безпека застосування

[ред. | ред. код]

Поради щодо безпеки використання SSH:

Архітектура

[ред. | ред. код]
Diagram of the SSH-2 binary packet.

SSH-2 протокол має внутрішню архітектуру (визначено в RFC 4251) з чітко розділеними шарами. До них належать:

Відбитки публічного ключа

[ред. | ред. код]

Окрім захисту сервера від неавторизованого користувача різноманітними методами аутентифікації, клієнт також має систему, яка запам'ятовує "відбитки публічних ключів" (ssh fingerprint) в файлі known_hosts, який містить адресу сервера, алгоритми ключа та SHA-1 хеш від публічного ключа.

Існує SSHFP DNS-запис (RFC 4255) пропонує перевіряти відбитки публічних ключів, також описує формат запису для зберігання в DNS.

Поліпшення

[ред. | ред. код]

Вони призначені для підвищення продуктивності продуктів SSH:

Примітки

[ред. | ред. код]
  1. а б в Service Name and Transport Protocol Port Number RegistryIANA.
  2. Amies A, Wu C F, Wang G C, Criveti M (2012). Networking on the cloud [Архівовано 14 червня 2013 у Wayback Machine.] IBM developerWorks, June 21.
  3. The story of the SSH port is 22. www.ssh.com (англ.). Процитовано 8 квітня 2024.
  4. History of SSH - SSH, The Secure Shell: The Definitive Guide, 2nd Edition [Book]. www.oreilly.com (англ.). Процитовано 8 квітня 2024.
  5. Secure Shell (secsh). datatracker.ietf.org (англ.). Процитовано 8 квітня 2024.
  6. O'Reily: Secure Shell, The Definitive Guide
  7. SSH Frequently Asked Questions. Архів оригіналу за 1 жовтня 2017. Процитовано 4 березня 2013.
  8. RFC 4253, section 5. Compatibility With Old SSH Versions Архівована копія. Архів оригіналу за 1 березня 2018. Процитовано 13 травня 2022.((cite web)): Обслуговування CS1: bot: Сторінки з посиланнями на джерела, де статус оригінального URL невідомий (посилання) Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання), IETF
  9. SSH Insertion Attack. Архів оригіналу за 8 липня 2011. Процитовано 4.3.2013.
  10. Weak CRC allows packet injection into SSH sessions encrypted with block ciphers [Архівовано 5 березня 2018 у Wayback Machine.], US-CERT
  11. Weak CRC allows last block of IDEA-encrypted SSH packet to be changed without notice [Архівовано 5 березня 2018 у Wayback Machine.], US-CERT
  12. SSH-1 allows client authentication to be forwarded by a malicious server to another server [Архівовано 31 грудня 2017 у Wayback Machine.], US-CERT
  13. SSH CBC vulnerability [Архівовано 6 вересня 2017 у Wayback Machine.], US-CERT
  14. Seggelmann, R.; Tuxen, M.; Rathgeb, E.P. (18–20 July 2012). SSH over SCTP — Optimizing a multi-channel protocol by adapting it to SCTP. Communication Systems, Networks & Digital Signal Processing (CSNDSP), 2012 8th International Symposium on: 1—6. doi:10.1109/CSNDSP.2012.6292659.
  15. а б Stebila, D.; Green J. (December 2009). RFC5656 - Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer. Архів оригіналу за 19 липня 2012. Процитовано 12 листопада 2012.
  16. Miller, D.; Valchev, P. (3 вересня 2007). The use of UMAC in the SSH Transport Layer Protocol / draft-miller-secsh-umac-00.txt. Архів оригіналу за 19 серпня 2014. Процитовано 12 листопада 2012.

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]

Стандарти

[ред. | ред. код]
  Програмування   Інформаційні технології   Вільне програмне забезпечення
Програмне забезпечення Це незавершена стаття про програмне забезпечення.
Ви можете допомогти проєкту, виправивши або дописавши її.
(({alt))} Це незавершена стаття про комп'ютерні мережі.
Ви можете допомогти проєкту, виправивши або дописавши її.
Ця стаття містить текст, що не відповідає енциклопедичному стилю. Будь ласка, допоможіть удосконалити цю статтю, погодивши стиль викладу зі стилістичними правилами Вікіпедії. Можливо, сторінка обговорення містить зауваження щодо потрібних змін. (вересень 2012)
Ця стаття є сирим перекладом з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. Будь ласка, допоможіть поліпшити переклад. (листопад 2013)
Цю статтю потрібно повністю переписати відповідно до стандартів якості Вікіпедії. Ви можете допомогти, переробивши її. Можливо, сторінка обговорення містить зауваження щодо потрібних змін. (липень 2017)