Віддалена робота з Linux-сервером через SSH

Віддалена робота з Linux-сервером через SSHЧасто в роботі потрібно виконувати різні задачі на серверах, які працюють під 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.

Віддалена робота з Linux-сервером через SSH: 2 коментаря

  1. Класна стаття. Дуже дякую. Інколи дійсно необхідна пошагова інструкція. Ще зручна команда scp, зручно переносити файли нею.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *