Стаття також доступна російською (перейти до перегляду).
Призначення ssh_config
У щоденній роботі системного адміністратора використання ssh-клієнта (OpenSSH client) – звичайна практика. Однак, прописування довгих і складних команд конфігурування параметрів SSH вручну, в командному рядку в терміналі, забирає у фахівця багато зайвого часу. Адміністратори, інженери та користувачі Linux, що починають, можливо не знайомі з таким простим і зручним способом налаштування параметрів SSH, як використання файлу ssh_config.
У яких випадках вам необхідний ssh ??config? Уявіть собі ситуацію, коли ваше завдання – щоденне підключення до кількох віддалених серверів, причому з різними налаштуваннями (IP-адресою, логіном та паролем, номерами портів та іншими параметрами командного рядка). Погодьтеся, що вводити щоразу всі ці дані вручну - це нераціональне витрачання робочого часу. Як вирішити таку проблему?
Одне з можливих рішень – створення ssh bash alias (псевдоніма) для кожного з'єднання з віддаленим сервером. Однак, можна запропонувати більш оптимальний варіант — створити файл конфігурації для кожного користувача, в якому зберігатимуться різні параметри SSH для кожного віддаленого хоста, до якого ви підключатиметеся.
У цій статті ми розглянемо налаштування файлу ssh_config тільки для клієнта OpenSSH на локальній машині користувача (не торкаючись установок на віддаленому сервері).
Принцип роботи ssh_config
Параметри конфігурації SSH з'єднання можна прописати за допомогою трьох наведених нижче способів*:
- у опціях, що задаються за допомогою командного рядка;
- у налаштуваннях конфігураційного файлу конкретного користувача ~/.ssh/ssh_config;
- у загальносистемному конфігураційному файлі (для всіх користувачів цього локального комп'ютера) /etc/ssh/ssh_config;
*Примітка: найбільший пріоритет має командний рядок, потім іде ~/.ssh/ssh_config і в останню чергу вже /etc/ssh/ssh_config.
Покажемо на простому прикладі, як створити та відредагувати під Ubuntu ssh config file для конкретного користувача локальної машини.
- Якщо файл ssh_config не створений, необхідно створити його за допомогою команди:
touch ~/.ssh/config
- На наступному етапі потрібно відредагувати цей файл в nano ~/.ssh/config таким чином:
Host freehostUA HostName 178.20.153.253 Port 22 User root
Де: Host – це alias (псевдонім) для нашого SSH-з'єднання, HostName – IP адреса VPS (або ім'я хоста, якщо включений DNS), Port – номер порту, User – ім'я користувача.
За допомогою нескладних налаштувань ми створили або для нашого VPS на FREEhost.UA, таким чином, з'єднатися з нашим віддаленим сервером можна буде за допомогою простої команди в терміналі:
ssh freehostUA
Нижче опишемо, що означають параметри, що використовуються в ssh_config, а також надамо приклади типових налаштувань.
Linux подібну ОС Ubuntu можна встановити на VPS хостинг.
Параметри ssh_config
Усі параметри, які ви зможете використовувати в роботі з файлом ssh_config, можна переглянути, виконавши команду:
man ssh_config
Для вирішення типових завдань у роботі системного адміністратора радимо звернути увагу на такі параметри налаштувань*:
- Host - alias (псевдонім), довільне найменування хоста.
- HostName — IP-адреса віддаленого сервера або ім'я хоста (якщо настроєно DNS).
- Port – номер порту (якщо він нестандартний, за замовчуванням використовується порт 22).
- User – ім'я користувача.
- IdentityFile - вказується шлях до SSH-ключа, який використовується для аутентифікації при з'єднанні з віддаленим сервером (зазвичай, застосовується в тому випадку, коли ключі не зберігаються в директорії "за замовчуванням").
- IdentitiesOnly – повідомляє клієнту SSH, який саме ключ слід використовувати для автентифікації на сервері (а не будь-які ключі, які знаходяться в папці для ключів за промовчанням). У деяких випадках може використовуватися разом із параметром IdentityFile, якщо цей параметр прописаний у файлі ssh_config, то будуть перевірені всі ключі, навіть ті, які користувач введе у командному рядку.
- ServerAliveInterval і ServerAliveCountMax — ssh-клієнт запитуватиме відповідь від віддаленого хоста, навіть якщо він не отримує жодних даних у вказаний інтервал часу. Ці параметри допоможуть запобігти скиданню з'єднання через відсутність активності
- CertificateFile — використовується опційно, спільно з параметром IdentityFile для точної вказівки сертифіката, який потрібно надати для автентифікації.
- PreferredAuthentications - параметр, який встановлює в якому порядку будуть використовуватися методи аутентифікації (за замовчуванням: gssapi-with-mic, hostbased аутентифікація, аутентифікація на базі SSH-ключів, keyboard-interactive та вхід по паролю).
- SetEnv і SendEnv - ці параметри дозволяють ssh-клієнту передавати локальні змінні середовища на зазначений віддалений хост, при цьому сервер повинен бути налаштований для прийому цих змінних. Для цього системний адміністратор повинен на віддаленому сервері у файлі /etc/ssh/sshd_config встановити значення Yes для AcceptEnv.
- HostKeyAlias ??— клієнту SSH дається вказівка ??використовувати псевдонім ключа (key alias) із файлу ~/.ssh/known_hosts замість HostName. Цей параметр буде корисним для хостів з динамічними IP-адресами.
- ProxyJump - за допомогою цієї опції можна організувати SSH Jump Server (jump host або bastion host), використовуючи прапорець J під час написання команди.
- ForwardAgent і AddKeysToAgent - ця опція служить для організації безпечного прокидання ключа (agent forwarding), що дозволяє здійснити доступ віддаленого хоста до локального SSH-агенту користувача.
*Примітка: Нижче покажемо на прикладах, як використовувати дані опції у файлі ssh_config.
Приклади файлів ssh_config для організації доступу до серверів SSH
Приклад файлу ssh_config із застосуванням методу аутентифікації на основі SSH-ключів
У прикладі файлу наведено директорію для користувача root на локальній машині, в якій зберігається SSH-ключ (при написанні файлу, ви можете підставити свої дані). Також у цьому прикладі покажемо, як створювати кілька псевдонімів у ssh_config для з'єднання по SSH до різних серверів (у першому випадку це наш сервер на FREEhost.UA, у другому випадку це сервер бази даних).
Host freehostUA HostName 178.20.153.253 Port 22 User root IdentityFile /root/.ssh/id_rsa Host DB1 HostName db1.server.ua Port 2222 User adminDB
*Примітка: Як створити пару SSH-ключів під Linux докладно описано у статті на нашому сайті FREEhost.UA
Вирішення проблеми підвісної SSH-сесії
Наведемо ще один приклад файлу ssh_config, але вже з використанням параметрів ServerAliveInterval, ServerAliveCountMax та PreferredAuthentications (у даному прикладі вибрано метод аутентифікації publickey, тобто з використанням SSH-ключів):
Host test1 HostName test1.freehost.com.ua User root PreferredAuthentications publickey ServerAliveInternal 5 ServerAliveCountMax 1
Іноді сесії SSH можуть зависати через проблеми з якістю зв'язку та з інших причин. Що відбувається у цьому випадку? SSH почне перевіряти з'єднання, виконуючи надсилання запитів echo на віддалений сервер протягом певних проміжків часу. За це відповідає параметр ServerAliveInterval. Якщо без відповіді залишиться більше запитів, ніж задано в параметрі ServerAliveCountMax, то SSH закриє це з'єднання.
Організація SSH Jump Server
SSH Jump Server - це сервер під керуванням ОС Лінукс, єдиний у корпоративній мережі компанії, доступний з мережі Інтернет. Такий сервер застосовується як шлюз у приватній мережі для отримання доступу до інших комп'ютерів під Linux за допомогою SSH. Bastion host - єдиний шлюз, через який можна отримати доступ до ІТ-інфраструктури компанії. Це дуже дієвий захід у плані забезпечення кібербезпеки та захисту від атак зловмисників. Для системного адміністратора наявність Jump host у корпоративній мережі значно спрощує ведення обліку всіх SSH-з'єднань. За допомогою командного рядка цю функцію можна реалізувати за допомогою прапора –J.
Наприклад, якщо ви маєте доступ до «бастіону» bastion.server.ua, то ви отримуєте можливість доступу до інших серверів у локальній мережі організації, які розташовані за NAT, для цього потрібно застосувати прапорець -J у командному рядку:
ssh -J bastion.server.ua 10.200.36.150
где 10.200.36.150 — це IP-адреса станції в локальній мережі, до якої ви плануєте підключення.
Однак, замість введення команди в терміналі простіше одразу прописати цю функцію у файлі ssh_config:
Host 10.1.1.* ProxyJump bastion.server.ua
Коли адміністратор введе команду ssh 10.200.36.150 у терміналі, SSH-клієнт встановить з'єднання c bastion.server.ua, внаслідок чого воно буде перенаправлене на IP 10.200.36.150 у локальній мережі. Звичайно ж, ми показали найпростіший приклад використання опції ProxyJump у ssh_config, для більш серйозних рішень потрібно ще провести додаткові налаштування на віддаленому сервері, але ця тема вже для окремої статті про Jump host.
Висновок
На закінчення хочеться сказати, якщо ви працюєте по SSH, як звичайний користувач і застосовуєте тільки дуже прості команди, то можливо вам буде зручніше працювати з командним рядком.
Однак, у щоденній діяльності системного адміністратора, який працює з корпоративними рішеннями (з різними серверами, локальними мережами тощо), виконує безліч налаштувань та опцій, використання командного рядка буде зайвою тратою робочого часу. Набагато ефективніше використовувати налаштування файлу ssh_config, в чому вам допоможе наш матеріал, де ми постаралися висвітлити основні параметри цього файлу, а також показати приклади типових налаштувань, які вам знадобляться для роботи. Використання ssh_config буде також корисно для автоматизації роботи, при написанні скриптів виконують самостійно команди на віддалених серверах.
Якщо ж у вас виникають проблеми з більш складним та індивідуальним налаштуванням ssh_config, то ви завжди можете звернутися за консультацією до фахівців нашої компанії FREEhost.UA.
Дата: 16.12.2020 Автор: Евгений
|
|
Рекомендовані статті на тему:
- Як хмарні технології сприяють розвитку Інтернету речей ( IoT)
- Использование SSHFS для монтирования удаленной файловой системы
- Організація централізованого зберігання журналів вузлів під управлінням ОС Ubuntu
- Все про Keycloak: навіщо потрібний, кому підходить та які дає переваги
- Система віддаленого керування комп’ютерами MeshCentral
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus