SSH с нуля: безопасное управление удаленными серверами

Этот курс научит вас основам работы с протоколом SSH для администрирования серверов. Вы освоите подключение, настройку ключей безопасности, передачу файлов и конфигурацию удобного доступа.

1. Введение в SSH: установка клиента и базовые команды подключения

Введение в SSH: установка клиента и базовые команды подключения

Добро пожаловать в курс «SSH с нуля». Если вы хотите управлять серверами, настраивать веб-сайты или работать с облачными технологиями, этот протокол станет вашим главным инструментом. В этой первой статье мы разберем, что такое SSH, как подготовить ваш компьютер к работе и как выполнить свое первое подключение.

Что такое SSH и зачем он нужен?

SSH (Secure Shell) — это сетевой протокол, который позволяет безопасно управлять компьютером удаленно. Представьте, что у вас есть длинный, невидимый и бронированный кабель, который тянется от вашего ноутбука к серверу, находящемуся в другой стране. Все, что вы печатаете на своей клавиатуре, мгновенно передается на сервер, а ответ сервера возвращается на ваш экран.

Главная особенность SSH — это безопасность. В отличие от старых протоколов (например, Telnet), SSH шифрует весь трафик. Это значит, что даже если злоумышленник перехватит ваши данные по пути, он увидит лишь бессмысленный набор символов.

!Схема безопасного туннеля SSH между клиентом и сервером

Клиент и Сервер

Для работы SSH нужны две стороны:

  • SSH-сервер — это программа, запущенная на удаленной машине (к которой мы подключаемся). Она «слушает» сеть и ждет входящих соединений. На большинстве Linux-серверов она установлена по умолчанию.
  • SSH-клиент — это программа на вашем компьютере, с помощью которой вы инициируете подключение.
  • В этой статье мы сосредоточимся на настройке клиента — то есть вашего рабочего места.

    Установка SSH-клиента

    Хорошая новость: в большинстве современных операционных систем SSH-клиент уже встроен. Вам не нужно скачивать сторонние программы вроде PuTTY, если вы этого не хотите. Мы будем использовать стандартный консольный клиент OpenSSH, так как он является индустриальным стандартом.

    Windows 10 и 11

    В современных версиях Windows клиент OpenSSH встроен в систему. Чтобы проверить его наличие:

  • Нажмите Win + R, введите cmd и нажмите Enter.
  • В открывшемся черном окне введите команду:
  • Если вы видите ответ вроде OpenSSH_for_Windows..., значит, все готово. Если система пишет, что команда не найдена, вам нужно включить этот компонент:

  • Откройте Параметры -> Приложения -> Дополнительные компоненты.
  • Нажмите Добавить компонент.
  • Найдите в списке Клиент OpenSSH (OpenSSH Client) и нажмите Установить.
  • macOS и Linux

    Пользователям этих систем повезло больше всех. SSH-клиент является неотъемлемой частью терминала. Просто откройте программу Terminal (Терминал) и вы готовы к работе.

    Проверка версии выполняется той же командой:

    Базовая структура команды подключения

    Теперь, когда у нас есть инструмент, давайте научимся им пользоваться. Самая простая команда для подключения выглядит так:

    Давайте разберем эту строку на составляющие:

    * ssh — вызов программы-клиента. * user — имя пользователя (логин) на удаленном сервере. Часто это root (администратор) или имя, которое вам выдал хостинг-провайдер. * @ — разделитель, который читается как «на» (пользователь user НА хосте host). * host — адрес сервера. Это может быть IP-адрес (например, 192.168.1.50) или доменное имя (например, myserver.com).

    Пример реальной команды:

    Ваше первое подключение: пошаговый процесс

    Когда вы вводите команду и нажимаете Enter, происходит магия «рукопожатия» (handshake). Рассмотрим, что вы увидите на экране при самом первом подключении к новому серверу.

    1. Проверка отпечатков (Fingerprint)

    Если вы подключаетесь к серверу впервые, SSH-клиент остановит вас предупреждением:

    > The authenticity of host '203.0.113.10' can't be established. > ED25519 key fingerprint is SHA256:K4d9... (набор символов). > Are you sure you want to continue connecting (yes/no/[fingerprint])?

    Что это значит? Ваш компьютер говорит: «Я раньше не видел этот сервер. Он предъявил удостоверение (отпечаток), но я не знаю, настоящий ли он. Ты доверяешь этому серверу?»

    Это защита от атаки «Человек посередине» (Man-in-the-Middle). Если вы арендовали сервер, хостинг обычно показывает вам его отпечаток в панели управления. Вы можете сверить их.

    Для продолжения нужно напечатать слово yes целиком и нажать Enter.

    После этого вы увидите сообщение:

    > Warning: Permanently added '203.0.113.10' (ED25519) to the list of known hosts.

    Теперь ваш компьютер запомнил этот сервер. При следующих подключениях этого вопроса не будет. Если же отпечаток сервера внезапно изменится (что может означать взлом или переустановку сервера), SSH выдаст страшное предупреждение и заблокирует подключение.

    2. Ввод пароля

    Далее система попросит пароль:

    > admin@203.0.113.10's password:

    Важный момент: Когда вы будете вводить пароль, курсор не будет двигаться, и звездочки появляться не будут. Это сделано специально для безопасности, чтобы никто не подсмотрел длину вашего пароля. Просто введите пароль «вслепую» и нажмите Enter.

    Если пароль верный, вы увидите приветственное сообщение сервера и приглашение командной строки, которое обычно выглядит так:

    Поздравляем! Теперь все команды, которые вы вводите, выполняются на удаленном сервере.

    Работа с нестандартными портами

    По умолчанию SSH работает на порту 22. Однако системные администраторы часто меняют этот порт для повышения безопасности (чтобы уменьшить количество автоматических атак ботов).

    Если ваш сервер работает, например, на порту 2222, стандартная команда не сработает — соединение будет отклонено.

    Чтобы указать порт, используется флаг -p (маленькая буква):

    Обратите внимание: флаг порта лучше указывать перед адресом сервера или в самом начале, хотя современные версии SSH понимают его и в конце.

    Пример:

    Завершение сеанса

    Когда вы закончили работу, не стоит просто закрывать окно терминала (хотя это и не смертельно). Правильный способ отключиться от сервера — использовать команду:

    Или использовать сочетание клавиш Ctrl + D. После этого вы увидите сообщение Connection to ... closed и вернетесь в командную строку своего локального компьютера.

    Решение частых проблем

    Вот таблица с самыми популярными ошибками новичков:

    | Ошибка | Возможная причина | Решение | | :--- | :--- | :--- | | Connection refused | На сервере не запущен SSH или указан неверный порт. | Проверьте IP и порт. Убедитесь, что сервер включен. | | Permission denied (publickey, password) | Неверный логин или пароль. | Проверьте раскладку клавиатуры и Caps Lock. | | Could not resolve hostname | Ошибка в адресе сервера. | Проверьте правильность написания IP или домена. | | Operation timed out | Сервер не отвечает (сетевая проблема). | Проверьте интернет, настройки брандмауэра (Firewall). |

    Заключение

    Теперь вы умеете устанавливать соединение с удаленным сервером, знаете, как обойти «ловушку» с невидимым паролем и как указать нестандартный порт. Это база, на которой строится все администрирование.

    В следующей статье мы разберем, как сделать подключение еще более безопасным и удобным, отказавшись от паролей в пользу SSH-ключей.

    2. Безопасность: генерация SSH-ключей и настройка входа без пароля

    Безопасность: генерация SSH-ключей и настройка входа без пароля

    В предыдущей статье мы разобрали, как подключиться к серверу, используя стандартный пароль. Это отличный старт, но в мире профессионального администрирования пароли считаются «прошлым веком». Они неудобны (их нужно вводить каждый раз), и, что важнее, они уязвимы для атак методом перебора (brute-force).

    Сегодня мы перейдем на новый уровень безопасности и удобства. Мы настроим аутентификацию по SSH-ключам. Это золотой стандарт индустрии, который позволит вам входить на сервер мгновенно и без ввода пароля, при этом делая взлом вашей системы практически невозможным.

    Как работают SSH-ключи: теория простыми словами

    Прежде чем вводить команды, важно понять принцип. SSH-ключи работают на основе асимметричного шифрования. В этой системе используется не один пароль, а пара файлов, математически связанных друг с другом:

  • Закрытый ключ (Private Key): Это ваш секретный ингредиент. Он хранится только на вашем компьютере. Никто, никогда и ни при каких обстоятельствах не должен его видеть. Это как ключ от сейфа, который лежит у вас в кармане.
  • Открытый ключ (Public Key): Это замок от сейфа. Вы можете копировать его на любые сервера, к которым хотите иметь доступ. Он не секретен — даже если злоумышленник украдет его, он не сможет использовать его для входа.
  • !Принцип работы пары ключей: закрытый ключ открывает замок (открытый ключ), установленный на сервере

    Когда вы пытаетесь подключиться к серверу:

  • Сервер видит, что вы стучитесь, и проверяет, есть ли у него ваш Открытый ключ.
  • Если ключ есть, сервер отправляет вам зашифрованную загадку.
  • Ваш компьютер использует Закрытый ключ, чтобы расшифровать загадку и отправить ответ.
  • Если ответ верный, сервер пускает вас внутрь.
  • Все это происходит за доли секунды, и вам не нужно ничего вводить.

    Шаг 1: Генерация пары ключей

    Первым делом нам нужно создать эту пару ключей на вашем локальном компьютере (не на сервере!).

    Откройте терминал (PowerShell в Windows или Terminal в macOS/Linux) и введите следующую команду:

    Разберем флаги: * -t ed25519: Указывает тип алгоритма шифрования. Мы используем Ed25519, так как это самый современный, быстрый и безопасный стандарт на сегодняшний день. Старый стандарт RSA все еще работает, но Ed25519 предпочтительнее. * -C "my-server-key": Это комментарий. Он не влияет на работу ключа, но помогает вам не запутаться, если ключей будет много. Обычно сюда пишут email или название устройства.

    Процесс создания

    После ввода команды система задаст вам несколько вопросов:

  • Enter file in which to save the key: Система спросит, куда сохранить файл. По умолчанию это папка .ssh в вашем профиле пользователя. Просто нажмите Enter, чтобы согласиться со стандартным путем.
  • Enter passphrase (empty for no passphrase): Вам предложат ввести кодовую фразу. Это дополнительный пароль для самого ключа. Если вы введете фразу, то при каждом использовании ключа компьютер будет спрашивать её. Если вы хотите входить на сервер полностью автоматически — оставьте поле пустым и нажмите Enter. Для максимальной безопасности фразу лучше задать, но для начала можно обойтись без нее.
  • После этого вы увидите красивую картинку из символов (randomart image) — это визуальное представление вашего ключа. Поздравляем, ключи созданы!

    Шаг 2: Где лежат мои ключи?

    Давайте убедимся, что файлы появились. Введите команду:

    Для macOS/Linux:

    Для Windows (PowerShell):

    Система в последний раз попросит вас ввести пароль от сервера (ведь ключи еще не работают). После ввода пароля вы увидите сообщение:

    > Number of key(s) added: 1 > Now try logging into the machine, with: "ssh 'user@203.0.113.10'"

    Что произошло внутри сервера?

    Эта команда взяла содержимое вашего файла id_ed25519.pub и дописала его в специальный файл на сервере по адресу ~/.ssh/authorized_keys. Этот файл — список всех «замков», которые серверу разрешено открывать.

    Шаг 4: Проверка входа

    Настало время истины. Попробуйте подключиться к серверу снова:

    Если вы все сделали правильно, вы мгновенно окажетесь в консоли сервера без запроса пароля. Магия сработала!

    Шаг 5: Отключение входа по паролю

    Теперь, когда у нас есть ключи, старый вход по паролю становится уязвимостью. Хакеры постоянно сканируют интернет и пытаются подобрать пароли к серверам. Если мы запретим вход по паролю, они могут подбирать его хоть вечность — сервер просто будет сбрасывать их соединение.

    Внимание: Выполняйте этот шаг только после того, как убедились, что вход по ключам работает!

  • Зайдите на сервер: ssh user@host
  • Откройте файл конфигурации SSH с правами администратора. Обычно используется редактор nano:
  • В этом файле нужно найти и изменить (или добавить) следующие параметры. Используйте стрелки для навигации:
  • Находим строку PasswordAuthentication и меняем значение на no:

    Убеждаемся, что вход по ключам разрешен (обычно это так по умолчанию):

    Также рекомендуется отключить вход для пользователя root (если вы создали отдельного пользователя), но об этом мы поговорим подробнее в следующих уроках. Пока достаточно отключить пароли.

  • Сохраните файл: нажмите Ctrl + O, затем Enter.
  • Выйдите из редактора: нажмите Ctrl + X.
  • Перезагрузка службы SSH

    Изменения в конфигурации не вступают в силу мгновенно. Нужно перезапустить службу SSH. Выполните команду:

    Теперь попробуйте открыть новое окно терминала (не закрывая текущее на всякий случай) и подключиться. Если пускает — отлично. Если вы попробуете сымитировать отсутствие ключа, сервер скажет Permission denied (publickey) и даже не предложит ввести пароль.

    Решение проблем с правами доступа

    SSH — очень параноидальный протокол. Если права доступа к файлам ключей настроены неверно (слишком открыты), SSH откажется работать, считая, что ключи могли быть скомпрометированы.

    Если вы видите ошибки, выполните эти команды на сервере для восстановления правильных прав:

    * 700 означает, что папку может читать, писать и открывать только владелец. * 600 означает, что файл может читать и писать только владелец.

    Заключение

    Поздравляем! Вы только что настроили профессиональную защиту для своего сервера. Теперь:

  • Вам не нужно помнить сложные пароли.
  • Вход на сервер занимает доли секунды.
  • Боты-взломщики, пытающиеся подобрать пароль, бессильны против вашего сервера.
  • В следующей статье мы разберем файл конфигурации SSH-клиента (~/.ssh/config), который позволит вам давать серверам короткие имена (псевдонимы) и управлять десятками подключений с легкостью.

    3. Оптимизация работы: настройка файла config и использование алиасов

    Оптимизация работы: настройка файла config и использование алиасов

    Мы прошли большой путь. В первой статье мы научились подключаться к серверам, используя базовые команды. Во второй — настроили непробиваемую защиту с помощью SSH-ключей, отказавшись от паролей. Казалось бы, идеальная среда для работы готова.

    Но давайте представим типичный день системного администратора или разработчика. У вас есть сервер для тестирования («dev»), сервер для готового продукта («prod»), личный сервер для VPN и, возможно, еще пара машин для экспериментов. У каждого из них свой IP-адрес (например, 203.0.113.10, 198.51.100.42), на некоторых изменены порты ради безопасности (не 22, а 2222 или 45678), а имена пользователей везде разные (root, admin, ubuntu, deploy).

    Держать все это в голове невозможно. Записывать в блокнот — неудобно. Каждый раз вводить команду длиной в строку — утомительно:

    В этой статье мы превратим эту длинную строку в одно короткое слово. Мы научимся использовать файл конфигурации SSH (~/.ssh/config). Это «телефонная книга» для ваших серверов, которая сэкономит вам часы рабочего времени.

    Что такое SSH Config?

    Файл config — это обычный текстовый файл, который лежит в вашей скрытой папке .ssh. SSH-клиент автоматически проверяет этот файл каждый раз, когда вы запускаете команду ssh.

    Суть его работы проста: вы придумываете короткое имя (псевдоним или алиас) для сервера и описываете все параметры подключения к нему. После этого вам достаточно сказать клиенту: «Подключись к myserver», и он сам подставит нужный IP, порт, пользователя и ключ.

    !Схема работы файла конфигурации: превращение псевдонима в полные данные подключения

    Создание и настройка файла

    По умолчанию этого файла может не существовать. Давайте его создадим.

    Linux и macOS

    Откройте терминал и выполните следующие действия:

  • Перейдите в папку .ssh:
  • Создайте файл config:
  • Откройте его в любом текстовом редакторе (например, nano):
  • Windows (PowerShell)

    В Windows этот файл находится по пути C:\Users\ВашеИмя\.ssh\config. Вы можете создать его через блокнот или VS Code. Важно, чтобы у файла не было расширения .txt. Он должен называться просто config.

    В PowerShell:

    Базовый синтаксис

    Структура файла очень проста. Она состоит из блоков, каждый из которых начинается с ключевого слова Host.

    Вот пример простейшей конфигурации:

    Разберем параметры:

    * Host: Это имя-псевдоним, которое вы придумываете сами. Именно его вы будете писать в командной строке. Оно может быть любым: prod, test, minecraft, vpn. * HostName: Это реальный адрес сервера. Сюда пишем IP-адрес или доменное имя (например, mysite.com). * User: Имя пользователя, под которым нужно войти.

    Теперь, сохранив файл, вместо команды ssh admin@203.0.113.10 вы можете просто написать:

    Продвинутая конфигурация: реальные сценарии

    Давайте рассмотрим более сложный пример, который покрывает 90% задач.

    Предположим, у вас есть два сервера:

  • Production: Боевой сервер, порт изменен на 2222, используется специальный ключ.
  • Staging: Тестовый сервер, стандартный порт, но другой пользователь.
  • Вот как будет выглядеть ваш config файл:

    Новые параметры:

    * Port: Указывает порт подключения. Теперь вам не нужно каждый раз писать флаг -p 2222. IdentityFile: Самый полезный параметр для тех, кто работает с множеством ключей. Он указывает, какой именно закрытый ключ* использовать для этого конкретного сервера. Это позволяет вам иметь разные ключи для работы и личных проектов, не путаясь в них.

    Теперь подключение к сложному боевому серверу выглядит так:

    Система сама поймет, что нужно стучаться на порт 2222, использовать пользователя deploy и взять конкретный файл ключа.

    Глобальные настройки и символы подстановки

    Иногда нам нужно применить какую-то настройку сразу ко всем серверам. Для этого используется символ звездочки * (wildcard).

    Обычно блок с глобальными настройками помещают в самый конец файла.

    Что мы здесь настроили?

  • User root: Если для конкретного хоста не указан пользователь, SSH по умолчанию попробует войти как root. Это удобно, если вы везде админ.
  • Compression yes: Включает сжатие трафика. Полезно при медленном интернете.
  • ServerAliveInterval 60: Это спасение от разрывов соединения. Этот параметр заставляет ваш клиент каждые 60 секунд отправлять серверу «пустой» сигнал («Ты тут?»), чтобы роутеры и брандмауэры не разрывали соединение из-за бездействия. Если вас часто выбрасывает из консоли с ошибкой Broken pipe или Timeout, эта настройка для вас.
  • Приоритет настроек

    Важно помнить: SSH читает файл сверху вниз и использует первое найденное совпадение.

    Именно поэтому специфичные настройки (для конкретных серверов) пишут вверху, а общие (с Host ) — в самом низу. Если вы напишете Host в начале файла и укажете там User root, то это правило перекроет всех пользователей, указанных ниже.

    Организация файла

    Когда серверов становится много, файл может разрастись. Вы можете использовать комментарии, начинающиеся с символа #, чтобы структурировать записи.

    Безопасность файла config

    Хотя в файле config не хранятся пароли или сами ключи (только пути к ним), он содержит информацию о вашей инфраструктуре: IP-адреса, логины, порты. Эта информация может быть полезна злоумышленнику для разведки.

    Поэтому крайне важно выставить правильные права доступа к этому файлу (особенно на Linux/macOS).

    Выполните команду:

    Это разрешит чтение и запись только вам (владельцу файла) и запретит доступ всем остальным пользователям системы.

    Отладка конфигурации

    Иногда бывает так: вы настроили алиас, пишете ssh my-server, а подключение не идет или используется не тот ключ. Как понять, что происходит?

    Используйте флаг -v (verbose — подробный режим) вместе с вашим алиасом:

    В потоке текста вы увидите строки вроде:

    > debug1: Reading configuration data /Users/user/.ssh/config > debug1: Applying options for my-server > debug1: Connecting to 203.0.113.10 [203.0.113.10] port 2222.

    Это покажет вам, как именно SSH интерпретировал ваш файл конфигурации и какие параметры применил.

    Заключение

    Настройка ~/.ssh/config — это поворотный момент в изучении SSH. Вы перестаете бороться с запоминанием IP-адресов и начинаете управлять серверами, обращаясь к ним по понятным именам. Это не только экономит время, но и снижает вероятность ошибки (например, случайно зайти на prod вместо dev).

    Теперь ваш арсенал включает:

  • Умение подключаться.
  • Безопасные ключи.
  • Удобные алиасы.
  • В следующих статьях мы рассмотрим, как не только управлять сервером, но и передавать файлы туда и обратно, используя протоколы SCP и SFTP, которые также работают поверх SSH и отлично понимают ваши новые алиасы.

    4. Работа с файлами: копирование данных через SCP и SFTP

    Работа с файлами: копирование данных через SCP и SFTP

    Мы прошли большой путь в освоении SSH. Вы уже умеете подключаться к серверу, настроили безопасный вход по ключам и даже оптимизировали свою работу с помощью файла конфигурации и алиасов. Теперь вы можете зайти на любой свой сервер за долю секунды, набрав короткую команду вроде ssh prod.

    Однако администрирование — это не только выполнение команд. Очень часто возникает задача передать данные: загрузить код веб-сайта на сервер, скачать логи ошибок для анализа или сделать резервную копию конфигурационных файлов к себе на ноутбук.

    В этой статье мы разберем два встроенных инструмента, которые работают поверх протокола SSH и позволяют передавать файлы так же безопасно, как вы управляете терминалом: SCP и SFTP.

    SCP: Secure Copy Protocol

    SCP (Secure Copy Protocol) — это утилита для копирования файлов, которая работает по принципу «выстрелил и забыл». Она идеально подходит, когда вы точно знаете, какой файл и куда хотите отправить.

    Если вы знакомы с обычной командой копирования в Linux/macOS (cp), то scp покажется вам родной. Разница лишь в том, что cp копирует файлы внутри одного компьютера, а scp умеет перекидывать их через сеть.

    !Передача файлов через защищенный туннель SCP

    Базовый синтаксис

    Структура команды выглядит так:

    Самое важное правило синтаксиса: удаленный путь всегда отделяется от адреса сервера двоеточием (:).

    Сценарий 1: Загрузка файла на сервер

    Представьте, что у вас на рабочем столе есть файл index.html, и вы хотите загрузить его на сервер в домашнюю папку пользователя.

    Команда будет выглядеть так:

    Разберем по частям:

  • scp — вызов программы.
  • index.html — файл на вашем компьютере (источник).
  • user@203.0.113.10 — адрес сервера (как при обычном подключении).
  • : — обязательный разделитель.
  • /home/user/ — папка на сервере, куда упадет файл (назначение).
  • Лайфхак: Если вы хотите сохранить файл в домашнюю папку пользователя на сервере, путь после двоеточия можно не писать (или написать тильду ~).

    Эта команда автоматически положит файл в домашнюю директорию (~) удаленного пользователя.

    Сценарий 2: Скачивание файла с сервера

    Теперь обратная ситуация. Вы хотите скачать файл логов error.log с сервера на свой рабочий стол.

    Просто меняем местами источник и назначение:

    Здесь: * Первый аргумент — это удаленный путь (адрес + двоеточие + путь к файлу). * Второй аргумент — локальная папка на вашем компьютере.

    Сценарий 3: Использование алиасов

    Помните, в прошлой статье мы настроили файл ~/.ssh/config и создали алиас prod для нашего боевого сервера? SCP умеет читать этот файл! Вам больше не нужно вводить IP-адреса и пользователей.

    Загрузка файла теперь выглядит так:

    Это невероятно удобно и исключает ошибки при вводе IP-адреса.

    Копирование папок

    По умолчанию SCP копирует только файлы. Если вы попытаетесь передать папку, вы получите ошибку:

    > scp: /my_folder: not a regular file

    Чтобы скопировать директорию целиком (со всем содержимым), нужно добавить флаг -r (recursive — рекурсивно), как и в обычной команде cp.

    SFTP: Интерактивный файловый менеджер

    Если SCP — это курьер, который быстро доставляет посылку и уходит, то SFTP (SSH File Transfer Protocol) — это полноценный проводник. Это интерактивная сессия, похожая на работу в командной строке, но предназначенная специально для файлов.

    SFTP полезен, когда: * Вы не помните точное название файла или путь к нему. * Вам нужно «погулять» по папкам сервера, посмотреть их содержимое и выбрать, что скачать. * Нужно скачать или загрузить много разных файлов из разных мест.

    Запуск SFTP

    Подключение происходит так же просто, как и по SSH. И да, алиасы здесь тоже работают:

    После ввода этой команды приглашение командной строки изменится на sftp>. Это значит, что вы находитесь внутри специальной оболочки.

    Основные команды SFTP

    Внутри SFTP работают многие привычные команды, но с особенностями. Главное отличие: у нас есть две файловые системы — удаленная (сервер) и локальная (ваш компьютер).

    #### Навигация

    * pwd — показать текущую папку на сервере. * lpwd (Local pwd) — показать текущую папку на вашем компьютере. * ls — показать файлы на сервере. * lls (Local ls) — показать файлы на вашем компьютере. * cd directory — перейти в папку на сервере. * lcd directory (Local cd) — перейти в папку на вашем компьютере.

    Заметили закономерность? Команды с префиксом l (local) относятся к вашей машине.

    #### Передача файлов

    Для передачи используются две главные команды: put (положить) и get (взять).

    Загрузка на сервер (Upload):

    Эта команда возьмет archive.zip из вашей текущей локальной папки и загрузит его в текущую удаленную папку.

    Скачивание с сервера (Download):

    Берет файл с сервера и сохраняет его на ваш компьютер.

    Если нужно скачать папку, используйте флаг -r:

    Выход из SFTP

    Чтобы завершить сеанс и вернуться в обычный терминал, введите:

    или

    Сравнение SCP и SFTP

    | Характеристика | SCP | SFTP | | :--- | :--- | :--- | | Тип работы | Одноразовая команда | Интерактивная сессия | | Скорость запуска | Быстро (для 1 файла) | Медленнее (нужно подключаться) | | Удобство | Идеально для скриптов и быстрых копий | Идеально для просмотра и выбора файлов | | Возобновление | Нет (при обрыве начинать сначала) | Поддерживает докачку (команда reget) |

    Графические клиенты

    Хотя мы учимся работать в терминале, стоит знать, что протокол SFTP поддерживается большинством популярных файловых менеджеров. Если вам нужно визуально видеть дерево папок, перетаскивать файлы мышкой (Drag-and-Drop) и редактировать их на лету, вы можете использовать такие программы, как:

    * FileZilla (кроссплатформенная, бесплатная) * Cyberduck (macOS/Windows) * WinSCP (Windows)

    В этих программах при подключении нужно выбрать протокол SFTP (SSH File Transfer Protocol), указать адрес сервера (или IP), имя пользователя и выбрать файл вашего SSH-ключа в настройках аутентификации. Порт по умолчанию — 22.

    Это гораздо безопаснее, чем старый FTP, так как пароли и файлы передаются в зашифрованном виде.

    Решение частых проблем

    1. Permission denied

    Если при попытке загрузить файл (scp или put) вы видите ошибку Permission denied, значит, у вашего пользователя нет прав на запись в целевую папку на сервере.

    * Решение: Загружайте файлы в домашнюю папку пользователя (~ или /home/username/), там у вас всегда есть права. А уже потом, зайдя по SSH, переместите их куда нужно с помощью sudo mv.

    2. No such file or directory

    Ошибка возникает, если вы ошиблись в пути к файлу.

    * Решение: Используйте SFTP, чтобы зайти на сервер и проверить командой ls, где именно лежит файл и как он точно называется. Помните, что в Linux File.txt и file.txt — это два разных файла.

    3. Connection refused

    Сервер отклоняет подключение.

    * Решение: Проверьте, правильный ли порт вы используете. Если у вас настроен нестандартный порт в ~/.ssh/config, SCP подхватит его автоматически. Если вы не используете конфиг, в SCP порт указывается флагом -P (большая буква!), в отличие от SSH, где флаг -p (маленькая).

    Заключение

    Теперь ваш арсенал управления серверами укомплектован полностью. Вы умеете:

  • Управлять системой через SSH.
  • Настраивать безопасный доступ без паролей.
  • Использовать алиасы для удобства.
  • Перемещать файлы туда и обратно с помощью SCP и SFTP.
  • Этих знаний достаточно для выполнения 99% задач веб-разработчика или системного администратора. В следующих материалах мы можем углубиться в автоматизацию этих процессов, но база у вас уже есть.

    5. Продвинутые техники: проброс портов и туннелирование

    Продвинутые техники: проброс портов и туннелирование

    Мы подошли к финальной и самой «магической» части нашего курса. Вы уже умеете безопасно подключаться к серверам, использовать ключи вместо паролей, настраивать алиасы и передавать файлы. Казалось бы, что еще нужно?

    Представьте ситуацию: на вашем удаленном сервере запущена база данных (например, MySQL или PostgreSQL). Из соображений безопасности порт базы данных закрыт фаерволом для внешнего мира. Подключиться к ней можно только находясь внутри самого сервера. Но вам нужно работать с этой базой, используя удобный графический интерфейс (например, DBeaver или Workbench) на вашем ноутбуке.

    Как быть? Открывать порт базы данных для всего интернета — это дыра в безопасности. Использовать консольный клиент SQL на сервере — неудобно.

    Здесь на сцену выходит SSH-туннелирование (Port Forwarding). Это технология, которая позволяет прокладывать зашифрованные «трубы» внутри вашего SSH-соединения, связывая порты вашего компьютера с портами удаленного сервера.

    Что такое SSH-туннель?

    SSH-туннель — это способ перенаправления сетевого трафика через зашифрованный канал SSH. Представьте, что SSH — это поезд, идущий от вашего компьютера к серверу. Обычно в этом поезде едут только текстовые команды. Но туннелирование позволяет прицепить к этому поезду дополнительные вагоны, в которые можно положить любой другой трафик: запросы к веб-сайтам, соединение с базой данных или даже доступ к рабочему столу.

    Существует три основных типа туннелей:

  • Local Port Forwarding (-L) — проброс локального порта на удаленный сервер.
  • Remote Port Forwarding (-R) — проброс удаленного порта на локальный компьютер.
  • Dynamic Port Forwarding (-D) — создание SOCKS-прокси (динамический туннель).
  • Давайте разберем каждый из них подробно.

    Local Port Forwarding (Локальный проброс)

    Это самый популярный тип туннелей. Он используется, когда вы хотите получить доступ к сервису, который запущен на удаленном сервере (или в его локальной сети), но недоступен из интернета.

    Сценарий: На сервере prod (который мы настроили в прошлых уроках) работает веб-интерфейс для мониторинга на порту 8080. Фаервол блокирует этот порт снаружи. Вы хотите открыть этот интерфейс в браузере на своем ноутбуке по адресу localhost:3000.

    !Визуализация того, как трафик с вашего компьютера через туннель попадает на закрытый порт сервера.

    Синтаксис команды

    Разберем на примере:

    * -L — флаг Local (Локальный). * 3000 — порт, который откроется на вашем компьютере. * localhost — адрес назначения с точки зрения сервера. То есть, когда туннель дойдет до сервера prod, сервер должен отправить трафик на localhost (на самого себя). * 8080 — порт назначения на сервере. * prod — алиас вашего сервера.

    После запуска этой команды вы увидите привычную консоль сервера. Но теперь, не закрывая терминал, откройте браузер на своем ноутбуке и введите адрес:

    http://localhost:3000

    Магия! Вы увидите веб-интерфейс, который физически находится на удаленном сервере. Ваш браузер думает, что общается с вашим компьютером, но SSH незаметно пересылает пакеты на сервер.

    Доступ к другим серверам сети

    Туннель может вести не только на localhost сервера. Если ваш SSH-сервер имеет доступ к другой машине в своей локальной сети (например, к базе данных на 192.168.0.5), вы можете пробросить и её:

    Теперь, подключившись к localhost:5432 на своем ноутбуке, вы попадете на базу данных, спрятанную глубоко в частной сети за сервером prod.

    Remote Port Forwarding (Удаленный проброс)

    Этот тип работает в обратную сторону. Он нужен, когда вы хотите дать кому-то из интернета доступ к сервису, запущенному на вашем локальном компьютере, у которого нет публичного IP-адреса (например, вы сидите за NAT провайдера).

    Сценарий: Вы разрабатываете веб-сайт на своем ноутбуке (он доступен у вас как localhost:80). Вы хотите показать результат заказчику, но не можете выложить сайт на хостинг прямо сейчас. Вы можете использовать свой VPS-сервер как «ретранслятор».

    !Схема работы обратного туннеля: доступ из интернета к локальному компьютеру через сервер.

    Синтаксис команды

    Пример:

    * -R — флаг Remote (Удаленный). * 9000 — порт, который откроется на удаленном сервере. * localhost — адрес назначения с точки зрения вашего компьютера. * 80 — порт вашего локального веб-сервера.

    Теперь, если заказчик введет в браузере http://ip-вашего-сервера:9000, запрос прилетит на сервер, уйдет в туннель, вынырнет на вашем ноутбуке и попадет на ваш локальный сайт.

    Важное примечание: GatewayPorts

    По умолчанию SSH-сервер из соображений безопасности разрешает удаленные туннели только для самого сервера (интерфейс loopback). Чтобы порт 9000 стал доступен из внешнего интернета, на сервере в файле /etc/ssh/sshd_config должна быть включена опция:

    Не забудьте перезагрузить SSH-службу после изменения конфига.

    Dynamic Port Forwarding (SOCKS-прокси)

    Третий тип туннелей превращает ваш SSH-клиент в полноценный SOCKS-прокси сервер. Это позволяет перенаправлять весь трафик приложений (например, браузера) через удаленный сервер.

    Сценарий: Вы сидите в кафе с открытым Wi-Fi и боитесь, что ваши данные перехватят. Или вам нужно зайти на сайт, который доступен только из страны, где находится ваш сервер.

    Синтаксис команды

    Пример:

    * -D — флаг Dynamic (Динамический). * 1080 — стандартный порт для SOCKS-прокси (можно выбрать любой свободный).

    После запуска команды SSH начинает слушать порт 1080 на вашем компьютере. Теперь вам нужно зайти в настройки браузера (или системы) и указать параметры прокси:

    * Тип: SOCKS5 * Хост: localhost * Порт: 1080

    Как только вы это сделаете, весь ваш интернет-трафик пойдет через зашифрованный туннель до сервера prod, и уже оттуда выйдет в большой интернет. Для сайтов вы будете выглядеть так, будто находитесь по адресу сервера.

    Полезные флаги для туннелей

    Часто туннели нужны нам только для передачи данных, и нам не нужна командная строка сервера. Чтобы SSH не «висел» открытым терминалом, используются дополнительные флаги:

  • -NDo not execute a remote command. Этот флаг говорит клиенту: «Просто установи соединение и держи туннель, не запускай оболочку командной строки».
  • -fGo to background. Отправляет SSH-клиент в фоновый режим. Вы получите управление терминалом обратно, а туннель будет работать невидимо.
  • Идеальная команда для поднятия туннеля выглядит так:

    Как закрыть такой туннель? Так как он работает в фоне, команда exit не поможет. Вам нужно найти процесс и убить его. В Linux/macOS это делается так:

    Или, если вы используете Windows, через Диспетчер задач.

    Сохранение туннелей в Config

    Если вы постоянно используете один и тот же туннель, его можно прописать в наш любимый файл ~/.ssh/config. Тогда вам не придется запоминать порты.

    Теперь команда ssh tunnel-db автоматически поднимет туннель к базе данных.

    Заключение курса

    Поздравляем! Вы прошли путь от новичка до уверенного пользователя SSH. Давайте вспомним, чему мы научились:

  • Основы: Подключаться к серверам и понимать, что такое клиент и хост.
  • Безопасность: Генерировать ключи Ed25519 и отключать вход по паролям.
  • Удобство: Использовать файл конфигурации и алиасы для управления парком серверов.
  • Файлы: Копировать данные через SCP и SFTP.
  • Магия сети: Пробрасывать порты и создавать защищенные туннели.
  • SSH — это швейцарский нож системного администратора. То, что мы изучили — это фундамент, на котором держится весь современный интернет, от простых веб-сайтов до гигантских облачных кластеров. Используйте эти знания ответственно и продолжайте изучать Linux!

    Удачи в управлении вашими серверами!