Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
/
Курсова робота
на тему:
«Протокол SSH»
з дисципліни:
«Програмні технології захисту інформації»
Львів-2015
Зміст
Вступ 2
1. Протокол SSH 3
1.1. Архітектура 3
1.2. Основні функції 6
1.3. Забезпечення безпеки 6
1.4. Автентифікація сервера 7
1.5. Автентифікація клієнта 8
1.6. Протокол SFTP 9
2. Практичне використання SSH 11
2.1. Особливості SSH-клієнта WinSCP 11
2.1.1. Конфіденційність 13
2.1.2. Автентифікація 13
2.1.3. Обмін ключами 15
3. Програмна реалізація SSH клієнта 16
3.1. SharpSSH 17
3.2. Встановлення з’єднання 19
3.3. Передача файлів 19
4. Тестування розробленого продукту 21
4.1. Тестування основного функціоналу 21
4.2. Тестування швидкодії 22
Висновок 24
Список використаної літератури 25
Додатки 26
Вступ
Secure Shell, SSH (англ. Secure Shell – безпечна оболонка) – мережевий протокол рівня застосунків, що дозволяє проводити віддалене управління комп’ютером і тунелювання TCP-з’єднань (наприклад для передачі файлів). Схожий за функціональністю з протоколом Telnet і rlogin, проте шифрує весь трафік, в тому числі і паролі, що передаються.
Протокол SSH забезпечує захищену аутентифікацію, з’єднання і безпечну передачу даних між хостами мережі, шляхом шифрування трафіку, з можливою компресією даних. Ще однією важливою функціональною особливістю, є можливість створення захищених, шифрованих тунелів, для безпечної передачі через небезпечне середовище (наприклад інтернет), інших мережевих протоколів, також з можливістю зжимання трафіку.
Зараз протокол SSH, є стандартом, і широко використовується, наприклад, для віддаленого адміністрування серверних систем, тобто виконання різних команд і маніпуляцій в оболонці сервера через безпечне з’єднання, копіювання файлів через мережу.
Протокол існує в двох варіантах. Комерційна версія, розроблена SSH inc, і безкоштовна, з відкритим кодом – OpenSSH, яка в основному і використовується на більшості серверних платформах. Реалізація OpenSSH, є в усіх операційних системах сімейства Unix, і в більшості з них, SSH сервер і SSH клієнт, є стандартними утилітами.
Протокол SSH
Архітектура
З моменту створення протоколу SSH в 1995 році, було випущено декілька різних версій, головними з яких є версія 1.5 ( SSH1) і версія 2 (SSH2).
Ці два протоколи SSH несумісні між собою. В протоколі SSH1 часом виникають проблеми з безпекою. Цей протокол довше використовується і для нього існує більш обширена база підтримки. В SSH1 підтримується лише асиметричне шифрування RSA. SSH2 – більш новий і багатий можливостями протокол, який поки що, успішно витримує всі перевірки. Але встановлення з’єднання по протоколу SSH2 потребує набагато більше часу. SSH2 підтримує асиметричні алгоритми RSA і DSA.
Протокол SSH включає три основні компоненти:
Протокол транспортного рівня [SSH-TRANS] забезпечує аутентифікацію серверів, конфіденційність і цілісність. Цей протокол може також забезпечувати стиснення інформації. Транспортний рівень працює в основному з використанням з’єднання TCP/IP, але може бути реалізований на базі інших протоколів даних з гарантованою доставкою.
Протокол аутентифікації користувачів [SSH-USERAUTH] використовується на серверах для перевірки повноважень клієнтів. Цей протокол працює на основі протоколу транспортного рівня.
Протокол з’єднання [SSH-CONNECT] забезпечує мультиплексування шифрованого тунеля в декілька логічних каналів і працює поверх протокола аутентифікації користувачів.
/
Рис. 1.1. Архітектура протоколу SSH
Клієнт передає один запит на обслуговування в процесі організації безпечного з’єднання на транспортному рівні. Інший запит на обслуговування передається після успішної перевірки повноважень клієнта. Таке рішення забезпечує можливість створення нових протоколів і їх спільного використання з перечисленими вище протоколами.
Кожному серверному хосту слід мати ключ (host key). Хости можуть мати безліч ключів, створених з використанням різних алгоритмів. Можливе використання одного ключа безліччю хостів. Якщо хост має ключі, він повинен забезпечувати принаймні один ключ, який використовує кожен із потрібних алгоритмів відкритих ключів (DSS [FIPS-186-2]).
Ключ сервера використовується в процесі обміну ключами для підтвердження того, що клієнт реально зв'язується з потрібним сервером. Для того, щоб така перевірка стала можливою, клієнт повинен заздалегідь знати відкритий ключ сервера.
Можуть використовуватися дві моделі підтримки ключів:
Клієнт підтримує локальну базу даних, в якій зберігаються імена всіх хостів і відповідні відкриті ключі. Цей метод не потребує створення інфраструктури централізованого управління чи сторонньої координації. Недоліком даного методу є трудомісткість підтримки асоціацій між ключами і іменами хостів.
Асоціації між ключами і хостами сертифікуються спеціальним агенством СА (Certification Authority). Клієнт знає лише ключ кореневого СА і може перевірити всі ключі хостів, сертифікованими агенствами СА.
Другий варіант спрощує завдання підтримки, оскільки клієнтові потрібно зберігати єдиний ключ CA. З іншого боку, в цьому варіанті потрібна централізована сертифікація кожного хоста перш ніж стане можливою процедура перевірки повноважень. Крім того потрібно забезпечити високий рівень для централізованої інфраструктури сертифікації.
Протокол дозволяє відключити перевірку асоціації «сервер - ключ» при першому підключенні до хосту. Це дозволяє організувати з'єднання з хостом до отримання від нього ключа або сертифікації хоста. При такому з'єднанні забезпечується захист від пасивного прослуховування, але існує вразливість для активного перехоплення за участю людини. Реалізаціям, в загальному випадку, не слід дозволяти такі з'єднання за замовчуванням, оскільки вони можуть знижувати рівень безпеки.
Реалізаціям протоколу слід вживати розумних заходів з перевірки ключів хостів. Прикладом можливої стратегії може служити прийняття ключа без перевірки, тільки при першому з'єднанні з хостом, збереження отриманого ключа в локальній базі даних і його використання при кожному наступному підключенні до даного хосту.
Реалізації можуть забезпечувати додаткові можливості з перевірки коректності ключів хостів (наприклад, використання шістнадцяткових «відбитків», отримання хеша відкритого ключа за допомогою алгоритму SHA-1 [FIPS-180-2]). Такі «відбитки» можна легко перевірити по телефону або з використанням іншого комунікаційного каналу.
Всім реалізаціям слід забезпечувати опцію для заборони прийняття неперевірених ключів хостів.
Члени робочої групи вважають, що простота використання відіграє важливу роль при виборі безпечних рішень кінцевими користувачами і рівень безпеки не стане вище, якщо не будуть застосовуватися нові рішення. Таким чином можна припускати, що забезпечення опції, що дозволяє відмовитися від перевірки ключа, буде підвищувати загальний рівень безпеки в мережі Internet, незважаючи на локальне зниження рівня безпеки протоколу у тих випадках, коли перевірка відключена.
Основні функції
Протокол SSH виник як спроба убезпечити відкриті незахищені з'єднання. Згодом його функції були значно розширені. Найбільш важливими з них є:
Безпечні команди доступу до хосту. SSH дає можливість виконувати безпечні команди доступу до хосту, такі як ssh (віддалена оболонка), slogin (віддалений вхід в систему), scp (віддалене копіювання);
X11 Forwarding. SSH надає вбудований механізм для виконання віддалених клієнтів X Window.
Port forwarding. SSH може виконувати переадресацію портів, передаючи трафік c одного порту однієї машини на інший порт іншої машини. При цьому передаваний трафік шифрується;
Забезпечення безпеки
Безпека протоколу досягається використанням декількох рішень, які зводять до мінімуму ризик використання з'єднання:
Шифрування з'єднання, яке може виконуватися одним із методів, обраних в процесі переговорів. Шифроване з'єднання не дозволяє просто перехопити і використовувати трафік. Вибір алгоритму шифрування робить систему більш гнучкою, дозволяючи не використовувати алгоритми, в яких виявлені слабкі місця або які не може підтримувати одна зі сторін;
Автентифікація сервера виконується при будь-якому з'єднанні. Це не дозволяє виконати підміну сервера або підміну трафіку;
Аутентифікація клієнта може виконуватися одним з декількох доступних способів. Це з одного боку може підвищити надійність аутентифікації, з іншого - робить систему більш гнучкою і спрощує її використання;
Перевірка цілісності пакетів дозволяє відстежити будь-які незаконні зміни в трафіку з'єднання. При виявленні таких змін, з'єднання негайно розривається;
Тимчасові параметри аутентифікації не дозволяють скористатися даними з'єднання в тому, випадку, якщо через деякий час після перехоплення воно все-таки було розшифровано. Застарівання зазвичай відбувається через годину;
Автентифікація сервера
Автентифікація сервера проводиться за допомогою інфраструктури відкритих ключів. Клієнт, який хоче встановити з'єднання з сервером шифрує дані відомим йому відкритим ключем сервера і відправляє їх серверу. Сервер повинен розшифрувати їх за допомогою відомого тільки йому секретного ключа, і відправити їх назад. Так клієнт може бути впевнений в тому, чи є хост тим, за кого себе видає.
Автентифікація сервера по протоколу SSH виконується за допомогою інфраструктури відкритих ключів. Відкритий ключ сервера клієнт отримує при першому з'єднанні з ним.
Автентифікація сервера дає можливість не покладатися на службу імен і маршрутизацію пакетів. У тому випадку, якщо порушнику вдалося підмінити запис в DNS або перенаправити IP-пакети на свій хост, аутентифікація не пройде, оскільки хост не володіє необхідними секретними ключами.
SSH захищає від:
Підміни IP-адрес (IP-spoofing), коли віддалений хост посилає пакети під іменем іншого хоста;
Підміни DNS-записів (DNS-spoofing), коли змінюється запис на сервері DNS і в результаті з'єднання встановлюється не з бажаним хостом, а з тим, на який вказує новий запис;
Перехоплення відкритих паролів і інших даних, які передаються у відкритому вигляді і кожен, хто має фізичний доступ до каналу, може їх впізнати.
Автентифікація клієнта
Методи автентифікації клієнтів, які використовує SSH:
Host-based автентифікація
Автентифікація за допомогою відкритих ключів
Kerberos-автентифікація
Автентифікація за допомогою паролю
Host-based автентифікація. Метод аналогічний використовуваному в r-командах. У тому випадку, якщо з'єднання встановлюється з привілейованого порту, і файл .rhosts дозволяє вхід в систему, він дозволяється. Цей метод є потенційно небезпечним, рекомендується не використовувати його. Для підвищення рівня своєї безпеки метод може бути доповнений RSA-автентифікацією клієнтського хоста.
Відкритий ключ. Клієнт відправляє серверу відкритий ключ. Якщо сервер знає його, він просить клієнта довести, що той знає і секретний ключ теж. Якщо клієнт може це довести, значить аутентифікація вважається успішною.
Керберос. Автентифікація проводиться за схемою v5 Kerberos.
Пароль. У самому крайньому випадку, якщо не вдалося провести автентифікацію не одним з перерахованих способів, використовується традиційна аутентифікація за допомогою пароля. Принцип аутентифікації аналогічний тому, який, наприклад, використовується в Telnet з тією різницею, що пароль передається по зашифрованому каналу.
Протокол SFTP
SFTP розшифровується як SSH File Transfer Protocol - SSH-протокол для передачі файлів. Він призначений для копіювання та виконання інших операцій з файлами поверх надійного і безпечного з'єднання. Як правило, в якості базового протоколу, який забезпечує з'єднання, і використовується протокол SSH2, але це не обов'язково.
У порівнянні з іншим протоколом, теж призначеним для копіювання файлів поверх SSH - протоколом SCP, який дозволяє тільки копіювати файли, SFTP дає можливість виконувати набагато більше операцій з ними: наприклад, докачувати файл після розриву з'єднання або видаляти файл на сервері і багато інших операцій. З цієї причини існують графічні і псевдографічні клієнти для SFTP, але немає таких, хто використовував би тільки SCP в чистому вигляді.
Останнє твердження може викликати сумніви, адже відомо, що існують WinSCP, модуль розширення для FAR та інші подібні менеджери, що містять SCP в назві, що може навести на думку, що всі їхні можливості реалізуються через протокол SCP. Насправді, ці програмні засоби спираються не тільки на SCP, а й на сам протокол SSH і на допомогу з боку сервера, наприклад, для отримання списку файлів і виконання тому подібних операцій. Що стосується SCP, то це просто протокол для віддаленого копіювання файлів RCP, що працює поверх SSH, але не більше.
SFTP покликаний бути більш платформонезалежним ніж SCP. Зокрема, як розкривати файлові шаблони, описується в самому стандарті - і це не залежить від сервера. У той час як в SCP як будуть розкриті файлові шаблони було повністю на совісті сервера, точніше командного інтерпретатора користувача. SCP-сервери більш поширені для Unix, а SFTP як для Unix, так і для Windows.
Існує хибна думка, що SFTP це просто звичайний FTP, що працює поверх SSH. Насправді SFTP - це новий протокол, розроблений з нуля. Ще його іноді плутають з Simple File Transfer Protocol. SFTP розшифровується як SSH File Transfer Protocol і нічого спільного з Simple File Transfer Protocol не має.
Сам по собі протокол SFTP не забезпечує безпеку роботи; це робить протокол на рівень нижче. Як правило, SFTP використовується в поєднанні з протоколом SSH2 (він навіть був розроблений тією ж робочою групою). Можна використовувати SFTP і з іншими протоколами, наприклад SSH1, але це пов'язане з додатковими труднощами.
При завантаженні (upload) файлів поряд з даними на сервер можуть копіюватися і метадані файлу, зокрема тимчасові мітки (timestamps), що при бажанні дає можливість зберегти в завантаженому на сервер файлі час модифікації незмінним.
На даний момент протокол SFTP не прийнятий в якості офіційного стандарту Інтернет. Найбільш нова специфікація є в чернетці (draft), який описує версію 6 протоколу. Найпоширенішою версією є третя, яка реалізована в SSH-сервері OpenSSH. У більшості Windows-клієнтів реалізована версія 4. SFTP, починаючи з версії 4, стає більш платформонезавісимость і працює однаково на Unix і Windows.
Практичне використання SSH
Особливості SSH-клієнта WinSCP
WіnSCP - це графічний клієнт SFTP для Wіndows з відкритим початковим кодом. Він також успадкував підтримку протоколу SCP. Призначений для захищеного копіювання файлів між комп’ютером і серверами, що підтримують ці протоколи.
/
Рис. 2.1. Графічний інтерфейс WіnSCP
Основні можливості програми:
Графічний інтерфейс в стилі Norton Commander
Інтеграція з PuTTY
Інтеграція з Windows (підтримка Drag&Drop, ярликів)
Робота з ключами і версіями протоколу SSH
Підтримка різних типів авторизації: по паролю, аутентифікації з відкритим ключем, Kerberos.
Можливість зберігати налаштування з'єднань.
Локалізації інтерфейсу для безлічі мов, зокрема української.
WinSCP підтримує чотири трансферні протоколи:
SFTP (SSH File Transfer Protocol);
FTP (File Transfer Protocol);
SCP (Secure Copy Protocol);
WebDAV (Web Distributed Authoring and Versioning).
SFTP розшифровується як SSH File Transfer Protocol - SSH-протокол для передачі файлів. Він призначений для копіювання та виконання інших операцій з файлами поверх надійного і безпечного з'єднання. Як правило, в якості базового протоколу, який забезпечує з'єднання, і використовується протокол SSH2, але це не обов'язково.
У порівнянні з іншим протоколом, теж призначеним для копіювання файлів поверх SSH - протоколом SCP, який дозволяє тільки копіювати файли, SFTP дає можливість виконувати набагато більше операцій з ними: наприклад, довантажувати файл після розриву з'єднання або видаляти файл на сервері і багато інших операцій. З цієї причини існують графічні і псевдографічні клієнти для SFTP, але немає таких, хто використовував би тільки SCP в чистому вигляді.
Що стосується SCP, то це просто протокол для віддаленого копіювання файлів RCP, що працює поверх SSH, але не більше.
За допомогою WіnSCP можна з’єднатися із сервером SSH (Secure Shell) по протоколу SFTP (SSH Fіle Transfer Protocol) чи SCP (Secure Copy Protocol), як правило з машинами під ОС UNІX (*BSD, Linux).
SFTP по замовчуванню входить до протоколу SSH-2. SCP також по замовчуванню входить до протоколу SSH-1. Обидва протоколи можуть працювати з обома версіями SSH. WіnSCP підтримує як SSH-1, так і SSH-2.
Конфіденційність
WinSCP підтримує різні алгоритми шифрування і дозволяє вам вибрати такий алгоритм, якому ви віддаєте перевагу. Вибрати бажаний алгоритм шифрування можна шляхом перетягування алгоритмів вгору і вниз у списку (або переміщаючи їх за допомогою кнопок вгору і вниз), щоб вказати порядок переваг. Коли ви робите з'єднання SSH, WinSCP буде шукати вниз за списком алгоритм, який підтримується сервером, а потім використати його.
WinSCP підтримує такі алгоритми шифрування:
AES (Rijndael) - 256, 192, or 128-bit SDCTR or CBC (SSH-2 only)
Arcfour (RC4) - 256 or 128-bit stream cipher (SSH-2 only)
Blowfish - 256-bit SDCTR (SSH-2 only) or 128-bit CBC
Triple-DES - 168-bit SDCTR (SSH-2 only) or CBC
Single-DES - 56-bit CBC (see below for SSH-2)
Single-DES - не рекомендується в стандартах протоколу SSH-2, але один або два сервери реалізації підтримують його. WinSCP може використовувати Single-DES, щоб взаємодіяти з цими серверами, якщо ви включите відповідну опцію, за замовчуванням ця функція відключена.
Автентифікація
У SSH-2 можна встановити з’єднання без використання механізмів SSH для ідентифікації клієнта сервером. Деякі сервери можуть віддавати перевагу виконання перевірки аутентифікації в каналі передачі даних, наприклад, або взагалі не вимагати аутентифікації.
За замовчуванням WinSCP припускає, що сервер вимагає аутентифікацію, і таким чином, потрібно ввести ім’я користувача.
Аутентифікація за допомогою Pageant (PuTTY Agent).
Pageant – це агент аутентифікаії SSH. Він зберігає ваші приватні ключі в пам’яті, вже декодованими. Таким чином, ви можете використовувти їх, не вказуючи пароль. Pageant є включеним в інсталяційний пакет WinSCP.
Аутентифікація за допомогою TIS або криптокард.
Аутентифікація за допомогою TIS і криптокард є загальною формою аутентифікації запит/відповідь доступної в SSH-1. Цю аутентифікацію можна використовувати коли використовуються S/Key одноразові паролі, або якщо є фізичний маркер безпеки, що згенерований відповідю на виклик. Цей метод може бути використаний, навіть, для запиту простих паролів.
Аутентифікація за допомогою інтерактивної клавіатури.
Еквівалентом TIS у SSH-2 є аутентифікація за допомогою інтерактивної клавіатури. Це гнучкий метод аутентифікації з використанням довільної послідовності запитів і відповідей, так що це не тільки корисно для механізму запита/відповідь (S/Key), але воно також може бути використано, наприклад, для запиту користувачеві ввести новий пароль, коли старий вже недійсний.
Аутентифікація за допомогою GSSAPI.
Цей механізм делегує процес аутентифікації в бібліотеку в іншому місці клієнтської машини. Спосіб аутентифікації може відрізнятися, але на практиці, як правило, використовується з Kerberos.
Аутентифікація з допомогою публічного ключа.
Аутентифікація за допомогою публічного ключа є альтернативним засобом ідентифікувати себе на сервері, не вводячи пароль. Це більш безпечний і гнучкіший метод, порівняно з іншими. Ви маєте змогу згенерувати пару ключів, що складається з відкритого ключа і секретного, який тримається в таємниці. Секретний ключ здатний генерувати підпис. Підпис можна перевірити на справжність за допомогою відкритого ключа.
Обмін ключами
Обмін ключами відбувається на початку SSH з’єднання (а іноді і після). Він є основою для всіх функцій безпеки в SSH. Тому дуже важливо для безпеки з’єдання забезпечити безпечний обмін ключами.
Обмін ключами є криптографічно інтенсивний процес, і якщо сервер ібо клієнт є відносно повільні машини, то цей процес може зайняти декілька секунд.
WinSCP підтримує різні варіації методів обміну ключами, які присутні в SSH-2, і дозволяє вибирати той метод, якому ви віддаєте перевагу.
WinSCP підтримує наступні різновиди обміну ключів (Diffie-Hellman і GSS):
Група 14: 2048-біт група.
Група 1: 1024-біт група. Ця група є менш безпечна як група 14, але є швидшою, коли використовуються повільні машини.
Група обміну: за допомогою цього методу, замість того, щоб використовувати фіксовану групу, WinSCP запитує у сервера групу для обміну.
Крім того, WinSCP підтримує RSA обмін ключами, який вимагає набагато менше обчислювальних витрат з боку клієнта, і дещо менше зі сторони сервера, ніж обмін ключами Діффі-Хеллмана.
Програмна реалізація SSH клієнта
Спроектована програма використовується в якості простого SSH клієнта. Її особливістю є малий розмір, швидкий запуск і простота користування.
Програма реалізована на платформі Net. Framework. Microsoft .NET — програмна технологія, запропонована фірмою Microsoft як платформа для створення як звичайних програм, так і веб-застосунків. Багато в чому є продовженням ідей та принципів, покладених в технологію Java. Одною з ідей .NET є сумісність служб, написаних різними мовами. Хоча ця можливість рекламується Microsoft як перевага .NET, платформа Java має таку саму можливість.
Кожна бібліотека (збірка) в .NET має інформацію про свою версію, що дозволяє усунути можливі конфлікти між різними версіями збірок.
.NET — крос-платформова технологія, в цей час існує реалізація для платформи Microsoft Windows, FreeBSD (від Microsoft) і варіант технології для ОС Linux в проекті Mono (в рамках угоди між Microsoft з Novell), DotGNU [1].
.NET поділяється на дві основні частини — середовище виконання (по суті віртуальна машина) та інструментарій розробки.
Середовища розробки .NET-програм: Visual Studio .NET (C++, C#, J#), SharpDevelop, Borland Developer Studio (Delphi, C#) тощо. Середовище Eclipse має додаток для розробки .NET-програм. Застосовні програми також можна розроблювати в текстовому редакторі та використовувати консольний компілятор.
Як і технологія Java, середовище розробки .NET створює байт-код, призначений для виконання віртуальною машиною. Вхідна мова цієї машини в .NET називається CIL (Common Intermediate Language), також відома як MSIL (Microsoft Intermediate Language), або просто IL. Застосування байт-кода дозволяє отримати крос-платформовість на рівні скомпільованого проекту (в термінах .NET: збірка), а не на рівні сирцевого тексту, як, наприклад, в С. Перед запуском збірки в середовищі виконання (CLR) байт-код перетворюється вбудованим в середовище JIT-компілятором (just in time, компіляція на льоту) в машинні коди цільового процесора.
SharpSSH
SharpSSH – це бібліотека, яка реалізує основні функції для роботи по протоколу SSH на платформі .NET. Протокол SSH дозволяє виконувати різні команди на віддаленому комп’ютері, пересилати файли від одного комп’ютера до іншого. Протокол забезпечує сувору автентифікацію і встановлює безпечне з’єднання через небезпечні канали.
Дана бібліотека підтримує наступні функції:
Обмін ключами: diffie-hellman-group-exchange-sha1, diffie-hellman-group1-sha1.
Шифрування: 3des-cbc, aes128-cbc.
Тип ключа: ssh-rsa і частково ssh-dss.
Авторизація: password, publickey (RSA).
Генерування DSA i RSA ключів.
Змінення паролю для привтних ключів.
Віддалене виконання.
SCP і SFTP.
Для встановлення безпечного з’єднання бібліотека надає такі класи:
SshStream – клас для читання/запису через SSH канал;
Scp – клас для керування обміну файлами через SSH канал;
Для того, щоб створити новий SSH потік, потрібно в конструктор передати адресу хоста, логін і пароль користувача (Рис. 3.1.).
//Create a new SSH stream
SshStream ssh = new SshStream("remoteHost", "username", "password");
//..The SshStream has successfully established the connection.
Рис. 3.1. Створення нового SSH потоку
Для читання даних з SSH каналу, використовується метод ReadResponse() (Рис. 3.2.).
//Writing to the SSH channel
ssh.Write( command );
//Reading from the SSH channel
string response = ssh.ReadResponse();
Рис. 3.2. Читання і запис даних
Для передачі файлів через захищене з’єднання використовується клас Scp (Рис.3.3).
//Create a new SCP instance
Scp scp = new Scp();
//Copy a file from local machine to remote SSH server
scp.To("C:\fileName", "remoteHost",
"/pub/fileName", "username", "password");
//Copy a file from remote SSH server to local machine
scp.From("remoteHost", "/pub/fileName",
"username", "password", "C:\fileName");
Рис. 3.3. Передача файлів
Клас Scp надає декілька тригерів для слідкування за процесом пересилання:
Scp.OnConnecting – спрацьовує при ініціалізації SSH з’єднання;
Scp.OnStart – спрацьовує на початку обміну;
Scp.OnEnd – спрацьовує після закінчення обміну;
Scp.OnProgress – обновляє прогрес обміну.
Встановлення з’єднання
Для встановлення з’єднання з віддаленим сервером використовуємо клас SshStream. В конструктор потрібно передати адресу сервера, логін користувача, а також пароль (Рис. 3.4).
Console.Write("-Connecting...");
SshStream ssh = new SshStream(host, user, pass);
Console.WriteLine("OK ({0}/{1})",ssh.Cipher,ssh.Mac);
Console.WriteLine("Server version={0}, Client version={1}", ssh.ServerVersion, ssh.ClientVersion);
Console.WriteLine("-Use the 'exit' command to disconnect.");
Console.WriteLine();
//Sets the end of response character
ssh.Prompt = "#";
//Remove terminal emulation characters
ssh.RemoveTerminalEmulationCharacters = true;
//Reads the initial response from the SSH stream
Console.Write( ssh.ReadResponse() );
//Send commands from the user
while(true)
{
string command = Console.ReadLine();
if (command.ToLower().Equals("exit"))
break;
//Write command to the SSH stream
ssh.Write( command );
//Read response from the SSH stream
Console.Write( ssh.ReadResponse() );
}
ssh.Close(); //Close the connection
Console.WriteLine("Connection closed.");
Рис. 3.4. Встановлення з’єднання
Передача файлів
Для обміну файлами по захищеному з’єднанню використовується клас Scp (Рис. 3.5). В залежності від переданого аргумента, можна передавати файли від локального комп’ютера до віддаленого і навпаки. Для відстеження процесу передавання використовуються допоміжні тригери.
public static void Scp(string cmd)
{
GetInput();
string local=null, remote=null;
if(cmd.ToLower().Equals("to"))
{
Console.Write("Local file: ");
local = Console.ReadLine();
Console.Write("Remote file: ");
remote = Console.ReadLine();
}
else if(cmd.ToLower().Equals("from"))
{
Console.Write("Remote file: ");
remote = Console.ReadLine();
Console.Write("Local file: ");
local = Console.ReadLine();
}
Scp scp = new Scp();
scp.OnConnecting += new FileTansferEvent(scp_OnConnecting);
scp.OnStart += new FileTansferEvent(scp_OnProgress);
scp.OnEnd += new FileTansferEvent(scp_OnEnd);
scp.OnProgress += new FileTansferEvent(scp_OnProgress);
try
{
if(cmd.ToLower().Equals("to"))
scp.To(local, host, remote, user, pass);
else if(cmd.ToLower().Equals("from"))
scp.From(host, remote, user, pass,local);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
Тестування розробленого продукту
Тестування основного функціоналу
Для перевірки роботоспроможності розробленої програми, встановимо віддалене з’єднання з SSH сервером.
/
Рис. 4.1. Головне меню розробленої програми
Дана програма дозволяє встановити з’єднання з віддаленим сервером по протоколу SSH.
Для встановлення з’єднання потрібно ввести логін і пароль користувача, а також адресу хоста (Рис. 4.2).
/
Рис. 4.2. Автентифікація користувача
Для тестування роботоспроможності програми встановимо SSH з’єдання до Linux shell:
/
Рис. 4.3. Підключення до оболонки Linux
Встановивши з’єднання, ми маємо змогу переслати файли з віддаленої машини до локальної, використовуючи sftp.
На рис. 4.4 зображено процес передачі файлів.
/
Рис. 4.4. Передача файлів
Тестування швидкодії
Для перевірки швидкодії, виконаємо пересилання файлів по звичайному FTP протоколу, а також через протокол SSH. Для досліду буде використовуватися мультимедійний файл розміром 179268 КВ.
FTP протокол:
/
Рис. 4.5. Протокол FTP. Тестування швидкості
Дослід показав, що середня швидкість передачі по FTP - 25.5 Mb/sec.
SSH протокол:
/
Дослід показав, що середня швидкість передачі по SSH - 16 Mb/sec.
Результати тестів показують, що протокол FTP має кращу продуктивність у порівнянні з протоколом SSH. Це пов’язано з шифруванням даних.
Висновок
В даній курсовій роботі було розглянуто основні можливості протоколу SSH. Були описані переваги використання даного протоколу, його архітектура, а також основні функції. Було розглянуто основні механізми забезпечення безпеки, а також протокол SFTP.
Було розглянуто практичне використання протоколу SSH на прикладі SSH клієнта WinSCP, особливості його реалізації.
Було реалізовано програмний продукт на базі бібліотеки SharpSSH, а саме SSH клієнт.
Також, було протестовано роботу реалізованої програми та порівняно швидкодію передачі файлів за допомогою протоколів FTP та SSH. Отримані результати показали, що передача по протоколу SSH є трохи повільнішою.
Список використаної літератури
SSH // Free encyclopedis Wikipedia
Amies A, Wu C F, Wang G C, Criveti M (2012). Networking on the cloud
Quoting Barrett and Silverman, SSH, the Secure Shell: The Definitive Guide
Seggelmann, R.; Tuxen, M.; Rathgeb, E.P. (18–20 July 2012). SSH over SCTP
Додатки
UserAuthPubKey
public class UserAuthPubKey
{
public void Auth()
{
try
{
JSch jsch=new JSch();
OpenFileDialog chooser = new OpenFileDialog();
chooser.Title ="Choose your privatekey(ex. ~/.ssh/id_dsa)";
//chooser.setFileHidingEnabled(false);
DialogResult returnVal = chooser.ShowDialog();
if(returnVal == DialogResult.OK)
{
Console.WriteLine("You chose "+
chooser.FileName+".");
jsch.addIdentity(chooser.FileName
// , "passphrase"
);
}
else
{
Console.WriteLine("Error getting key file...");
return;
}
InputForm inForm = new InputForm();
inForm.Text = "Enter username@hostname";
inForm.textBox1.Text = Environment.UserName+"@localhost";
if (inForm.PromptForInput())
{
String host = inForm.textBox1.Text;
String user=host.Substring(0, host.IndexOf('@'));
host=host.Substring(host.IndexOf('@')+1);
Session session=jsch.getSession(user, host, 22);
// username and passphrase will be given via UserInfo interface.
UserInfo ui=new MyUserInfo();
session.setUserInfo(ui);
session.connect();
Channel channel=session.openChannel("shell