Часто в роботі потрібно виконувати різні задачі на серверах, які працюють під Linux. Ці машини можуть бути розташовані як віддалено, так і за метр від вас, але пересідати до них не дуже хочеться та й неефективно це і незручно. В такому випадку нам потрібно вміти працювати з ними віддалено. На допомогу нам прийде SSH, про роботу з яким я розкажу в цій статті.
SSH — це безпечний мережевий протокол, що дозволяє встановлювати віддалений доступ до консолі, а також тунелювати TCP-з’єднання, наприклад, для передачі файлів.
Щоб ним користуватись, необхідно:
- встановити SSH-сервер на віддаленій машині;
- встановити SSH-клієнт на вашій робочій машині;
- мати доступ авторизації до віддаленої машини у вигляді логін/пароль або SSH-ключ.
Скоріш за все SSH-сервер на віддаленій машині у вас встановлений. Якщо ні, тоді це можна зробити наступною командою:
# aptitude install openssh-server
Якщо ваша робоча машина під Linux’ом, тоді там скоріш за все вже буде встановлений SSH-клієнт. Якщо його немає, тоді можна його встановити:
# aptitude install openssh-client
Якщо у вас Windows, тоді можна використати PuTTY або Xshell (рекомендується), що можна встановити безкоштовно для некомерційного домашнього користування. У цій статті я не описуватиму роботу в Windows. Якщо виникне потреба, то це буде тема для окремої статті.
Щоб здійснити підключення, необхідно виконати наступну команду:
# ssh igor@ssdev.pp.ua
У цьому випадку igor — це ім’я користувача на віддаленій машині, до якої я хочу підключитись, ssdev.pp.ua — це ім’я хоста віддаленої машини, яке може бути у вигляді домену або IP-адреси.
При першому підключенні вас перепитає, чи ви дійсно бажаєте підключитись до цієї машини, а також це буде запитом для скачування відкритого ключа для подальшої роботи в захищеному режимі.
Спершу буде спроба підключення через SSH-ключ, якщо такого немає, тоді необхідно буде ввести пароль, якщо для даного користувача дозволена авторизація паролем. Якщо все пройде успішно, тоді перед вами буде віддалена консоль, де ви можете виконувати будь-які дії в межах повноважень вашого користувача в системі.
З’ясуймо, як авторизуватись з допомогою SSH-ключа. Перше, що потрібно зробити — це згенерувати ключі на вашій машині, з якої ви підключаєтесь до сервера. Але перш ніж їх генерувати, перевіримо, можливо вони вже є:
# ls ~/.ssh
Якщо в результаті ви побачите файли id_rsa та id_rsa.pub, значить ключі вже існують. Якщо папки або цих файлів немає, значить їх потрібно створити.
Якщо папки немає, тоді створюємо її:
# mkdir ~/.ssh
Тепер генеруємо ключі:
# ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa
Вам буде запропоновано вказати пароль для ключа, щоб збільшити безпеку, але тоді буде потрібно вводити його кожен раз, коли буде використовуватись ключ. Чи вказувати пароль — обирати вам.
Буде створено два файли:
~/.ssh/id_rsa — закритий ключ, який ви маєте тримати в безпеці,
~/.ssh/id_rsa.pub — відкритий ключ, який необхідно передавати на сервер, до якого будете підключатись.
Для безпеки треба захистити ці файли, тому оновимо права доступу до закритого ключа:
# chmod 600 ~/.ssh/id_rsa
Тепер необхідно додати відкритий ключ до нашого сервера. Це можна зробити різними способами. Найпростішим способом буде виконання команди:
# ssh-copy-id igor@ssdev.pp.ua
Після автризації публічний ключ поточного користувача буде доданий до віддаленої машини, і всі наступні підключення не вимагатимуть введення пароля, бо буде використовуватись ключ.
Якщо даний спосіб з якоїсь причині не підходить (наприклад, неможливо авторизуватись паролем), тоді необхідно додати відкритий ключ до файлу /home/igor/.ssh/authorized_keys на віддаленій машині.
Це можна зробити, якщо вивести вміст відкритого ключа в консоль
# cat ~/.ssh/id_rsa.pub
та скопіювати його в буфер обміну і вставити в кінець файлу /home/igor/.ssh/authorized_keys на віддаленій машині. Кожен такий ключ має бути в окремій стрічці. Якщо на сервері немає такої папки чи файлу, то їх треба створити.
Також останній варіант можна зробити віддалено однією командою:
cat ~/.ssh/id_rsa.pub | ssh igor@ssdev.pp.ua "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Але в цьому випадку всеодно необхідно авторизуватись. Проте ви можете підключитись під іншим користувачем, щоб внести зміни в файл необхідного користувача (при цьому необхідно, щоб ваш інший користувач мав відповідні повноваження).
Варто зазначити, що кожна пара ключів є унікальною для кожного користувача в системі клієнта і публічний ключ необхідно встановлювати для кожного користувача в системі сервера.
Для безпеки раджу вимкнути на сервері авторизацію за допомогою пароля для користувача root. Для цього на віддаленій машині необхідно відкрити файл в текстовому редакторі:
# nano /etc/ssh/sshd_config
там знайдіть опцію PermitRootLogin і встановіть їй значення without-password:
PermitRootLogin without-password
Таким чином, підключитись під root’ом буде можливо лише за допомогою ключа.
Для більшої безпеки раджу встановити значення no для цієї опції:
PermitRootLogin no
Це унеможливить підключення під root‘ом взагалі. Проте ви завжди зможете працювати під ним, якщо увійдете під іншим користувачем і переключитесь на root за допомогою команди su:
# su
Або можна встановити програму sudo:
# aptitude install sudo
Наприклад, якщо потрібно, щоб користоувач igor міг виконувати команди з root-повноваженнями, треба додати цього користувача igor до групи sudo:
# adduser igor sudo
Після цього ми можемо запускати команди з root-повноваженнями від користувача igor. Для цього перед командою необхідно додати команду sudo, наприклад:
# sudo service ntp restart
Якщо на сервері багато користувачів, і ви хочете, щоб можна було авторизуватись лише під декількома, тоді необхідно в файлі /etc/ssh/sshd_config змінити опцію AllowUsers. Якщо цієї опції там немає, тоді її варто додати (бажано під коментарем Authentication). Після назви опції просто перелічуєте логіни користувачів в системі розділяючи пробілом.
AllowUsers igor project
Таким чином через SSH на сервер зможуть заходити лише два користувачі: igor та project.
Якщо ви багато працюєте по SSH, тоді варто використовувати програму tmux, яка дозволяє легко відновлювати роботу після розірвання зв’язку, а також надає багато зручних можливостей, наприклад, ділення екрану на частини та табулювання, яке дозволяє працювати паралельно в кількох сесіях, тощо.
Розуміня та вміння використовувати вищесказане, покриє більш ніж 80% необхідних знань та вмінь, потрібних для ефективної та безпечної роботи з віддаленими машинами під Linux.
Класна стаття. Дуже дякую. Інколи дійсно необхідна пошагова інструкція. Ще зручна команда scp, зручно переносити файли нею.
Спасибі, зараз спробую)