Хардкорні можливості openssl і openssh, про яких ти не знав

Такі інструменти, як OpenSSH і OpenSSL, в поданні не потребують. Це вічні друзі будь-якого сисадміна і багатьох просунутих користувачів. Однак далеко не всі знають про їх істинної мощі і можливості, накопичених за роки розробки. Сьогодні тобі відкриється маса цікавих способів використання цих програм.

OpenSSH, що прийшов на зміну дірявому Telnet, до сих пір займає перше місце серед систем віддаленого управління завдяки безпеки і простоті у використанні. Розібратися в ньому здатні все, навіть самі хромовані чайники, однак переважна більшість користувачів задіє мінімум його можливостей. Опустимо розповіді про ключах, кидок портів, проксінг і інших корисних, але всім відомих прийомах і розглянемо насправді цікаві і не дуже поширені способи використання цього інструменту.

Хардкорні можливості openssl і openssh, про яких ти не знав
Використовуємо OpenSSL для підключення до Gmail

З повним списком команд OpenSSL можна ознайомитися за допомогою наступних параметрів: list-standart-commands, list-message-digest-commands, list-cipher-commands.

Отже, трюк номер один - множинні підключення. OpenSSH здатний обслуговувати безліч одночасних з'єднань з однієї і тієї ж машиною. Зазвичай користувачі просто запускають команду і чекають її завершення, щоб запустити наступну. На щастя, цю проблему легко обійти шляхом поділу одного з'єднання на безліч сесій. Просто додай в конфіг ssh (

/.ssh/config) такі рядки:

Ти зможеш створити стільки сполук з одним і тим же сервером, скільки вважатиме за потрібне, причому час на повторну аутентифікацію витрачати буде не потрібно.

Хардкорні можливості openssl і openssh, про яких ти не знав
Шифруємо файли за допомогою OpenSSL

Трюк номер два - проксінг з'єднань. Припустимо, ти не можеш створити з'єднання з SSH-сервером безпосередньо, але можеш використовувати для цього інший хост, до якого ти теж маєш SSH-доступ. Додай в свій конфіг наступні рядки:

Команда ssh host створить з'єднання з сервером host.com через сервер proxy-host.com.

Тепер всі з'єднання підуть через вказаний HTTP-проксі.

Трюк номер чотири - тест пропускної здатності мережі. Щоб протестувати швидкість з'єднання, необов'язково встановлювати спеціалізоване ПО, досить утиліти pv і старого доброго SSH:

Тестуємо швидкість з'єднання за допомогою SSH і pv

Тепер весь трафік, що проходить через host.com, буде видно в графічному вікні wireshark на твоїй машині.

Трюк номер шість - передача файлів на низькій швидкості. Іноді буває необхідно передати велику кількість файлів на віддалену машину, але зробити це так, щоб процес не заважав роботі з мережею. В цьому випадку можна скористатися інструментом cstream:

Трюк номер сім - завжди відкрита SSH-сесія. Користувачам ноутбуків, чиє з'єднання з мережею може бути не постійним, доводиться кожен раз заново запускати SSH-клієнт в момент, коли мережа з'являється, і вбивати його при втраті з'єднання. Уникнути цього можна за допомогою інструменту autossh, який буде підтримувати ілюзію постійного з'єднання з сервером, відновлюючи зв'язок, коли мережа виявиться доступною:

Хардкорні можливості openssl і openssh, про яких ти не знав
Робимо бенчмарк SSL-сервера Gmail

Трюк номер дев'ять - віддалене порівняння файлів. Часто потрібно порівняти локальну і віддалену версію будь-якого конфіга, однак копіювати файли туди-сюди незручно і довго. В цьому випадку можна скористатися наступною командою:

Те ж саме можна зробити для двох файлів, що знаходяться на різних серверах:

cpu0: RNG AES

Результати бенчмарка криптографічних засобів, вбудованих в CPU платформи VIA Eden (процесорні інструкції для роботи з алгоритмом блокового симетричного шифрування AES):

Трюк номер 13 - синхронізація часу засобами SSH. У разі, якщо машина не має доступу до NTP-сервера або на ній не встановлено NTP-клієнт, синхронізувати час між машинами можна так:

Трюк номер 14 - установка пакетів віддаленої машини на локальну. Нерідко потрібно синхронізувати дві машини так, щоб вони мали однаковий набір встановлених пакетів. Стандартними методами зробити це складно, але за допомогою SSH простіше простого:

Трюк номер 15 - знімок віддаленого екрану. Можна дуже легко отримати зображення X-сервера з віддаленої машини, скориставшись стандартним графічним пакетом ImageMagick:

Щоб зберегти його у файлі, останню команду слід замінити на «> file.png»

Трюк номер 16 - прискорення передачі даних. Якщо машини, з якими встановлено з'єднання, знаходяться всередині свідомо безпечної мережі (наприклад, офіс або будинок), передачу даних засобами SSH можна дещо прискорити, якщо використовувати менш стійкий алгоритм шифрування. Для цього додай в конфігураційний файл наступні рядки:

Трюк номер 17 - висновок звуку з віддаленої машини на локальну. Разом з картинкою робочого столу віддаленої машини іноді хочеться отримати і звук. Це робиться за допомогою банального dd:

Трюк номер 18 - запуск локального скрипта на віддаленій машині. Нерідко потрібно запустити скрипт на віддаленій машині, проте копіювати його туди зовсім необов'язково, досить виконати наступну просту команду:

OpenSSL являє собою систему захисту і сертифікації даних, яка була розроблена у відповідь на створення протоколу безпечних сокетів SSL компанією Netscape. Всупереч розхожій думці, OpenSSL зовсім не є інструментом для реалізації SSL-протоколу і може виконувати безліч найрізноманітніших функцій, в тому числі управляти ключами і сертифікатами, розраховувати хеши і т. Д. Ось лише неповний список можливостей цього криптографічного комбайна:

  • створення ключів RSA і DSA і управління ними (команди rsa, dsa, dsaparam);
  • створення сертифікатів формату x509, формування запитів на сертифікацію, відновлення (команди x509, req, verify, ca, crl, pks12, pks7);
  • симетричне і асиметричне шифрування даних (команди enc, rsautl);
  • розрахунок хешів (команда dgst);
  • робота з S / MIME (команда s / mime).

Також OpenSSL може бути використаний для перевірки SSL-серверів і клієнтів за допомогою спеціальних команд sclient / s server і для тестування швидкості роботи різних алгоритмів (команда speed).

Ми не раз писали про роботу з пакетом OpenSSL, тому не будемо розглядати стандартні приклади його використання на кшталт створення хешів і сертифікатів, а відразу перейдемо до більш серйозних трюкам.

Хардкорні можливості openssl і openssh, про яких ти не знав

Тестуємо швидкість алгоритмів за допомогою команди speed

Час гроші

Одна з цікавих особливостей OpenSSL полягає в тому, що він може провести бенчмарк використовуваних алгоритмів і швидкості встановлення SSL-з'єднання. Для цього призначена стандартна команда s_time. Щоб оцінити швидкість установки SSL-з'єднання, потрібно застосувати її до команди openssl:

Те ж саме можна зробити за допомогою найбільш стійких алгоритмів:

Ці дві команди дозволяють визначити максимальну пропускну здатність SSL-сервера. Але ще більш цікавий спосіб полягає в тестуванні всіх підтримуваних алгоритмів. Для цього нам доведеться вдатися до скриптингу:

Така команда дозволяє виміряти швидкість установки SSL-з'єднання за допомогою різних алгоритмів шифрування, що можна використовувати, наприклад, для тюнінгу SSL-сервера. Якщо ж SSL-сервера як такого ще немає, його легко емулювати за допомогою самого OpenSSL. На серверній машині запускаємо OpenSSL-сервер:

На клієнтської виконуємо наступну команду:

клієнтська сторона

Ще одна цікава команда OpenSSL - це s_client, яка дозволяє коннектіться до віддалених SSL-серверів для їх тестування. Найчастіше я використовую цю команду, щоб перевірити дату видачі сертифіката. Для цього слід просто підключитися до віддаленого SSL-сервера, дочекатися, поки на екрані з'явиться інформація про сертифікат, а потім прогнати його через все той же openssl, щоб виокремити дати. При використанні однієї команди все це виглядає так:

Виокремлює потрібну інформацію з сертифікату x509

Команду s_client можна також застосовувати для тестування сервера на вразливість, яка полягає у використанні нестійких алгоритмів шифрування:

Сервер, який не підтримує нестійкі алгоритми шифрування, просто відмовиться встановлювати з'єднання, як це і сталося у випадку з сервером Google. Команда s_client також досить зручна для налагодження різних протоколів (в цьому випадку вона виступає у вигляді SSL'ного Telnet). наприклад:

шифрування

Про шифруванні за допомогою OpenSSL не писав тільки ледачий, тому ми зупинимося не на самих принципах шифрування, а на тому, як його можна використовувати для допоміжних завдань. Утиліта командного рядка openssl зручна тим, що вона, як і всі інші команди UNIX, може приймати дані на вхід і має для них стандартний вихід. В результаті за допомогою однієї простої команди можна забезпечити, наприклад, захищену передачу файлу по мережі:

Можна також застосовувати і різні скрипти, щоб автоматизувати шифрування безлічі файлів (пароль шифрування в / tmp / passwd):

Для розшифровки окремо взятих файлів використовуємо таку команду:

Для шифрування цілого каталогу простіше, звичайно, скористатися такою конструкцією:

OpenSSL зручно використовувати для генерування паролів:

А згенерувати хеш для запису в / etc / passwd можна так:

До речі, кодування в base64 може стати в нагоді для відправки файлів, якщо двоичная передача даних не підтримується:

Коли мова заходить про такі розвинених, перевірених часом і широко застосовуваних інструментах, як OpenSSL і OpenSSH, юніксоід негайно починають приводити десятки прикладів їх використання в повсякденному житті. Іноді ці приклади здаються простими і буденними, але іноді просто дивуєшся винахідливості розробників і користувачів цих програм.

Покажи цю статтю друзям: