SSH

SSH туннель: как создать и использовать? 

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

Шаг 1: Понимание туннелей SSH

Существует три типа туннелей SSH, которые можно использовать:

  1. Локальная переадресация портов. Перенаправляет трафик с локального порта на удаленный сервер через SSH-соединение. Применяется для доступа к службам удаленного сервера, которые в противном случае недоступны из-за ограничений брандмауэра или системы безопасности.
  2. Переадресация удаленного порта: Перенаправляет трафик с удаленного сервера на локальную машину через SSH-соединение. Применяется в тех случаях, когда необходимо открыть локальную службу для доступа к сети удаленного сервера.
  3. Динамическая переадресация портов (SSH SOCKS Proxy). Создает туннель динамической переадресации портов, позволяющий направлять весь сетевой трафик через удаленный сервер. Это может быть использовано для повышения уровня конфиденциальности или обхода сетевых ограничений.

Шаг 2: Создание туннеля SSH

Если у вас есть SSH-доступ к удаленному серверу, то вот как создать эти типы туннелей.

Локальная переадресация портов:

ssh -L local_port:remote_server:remote_port user@remote_server

Замените local_port, remote_server, remote_port и user на соответствующие значения.

Переадресация удаленного порта:

ssh -R remote_port:local_machine:local_port user@remote_server

Динамическая переадресация портов:

ssh -D local_port user@remote_server

Шаг 3: Использование туннеля SSH

После создания туннеля вы можете использовать его для безопасного доступа к удаленным сервисам или для маршрутизации сетевого трафика.

Локальная переадресация портов — откройте веб-браузер и перейдите по адресу http://localhost:local_port. Трафик будет безопасно туннелироваться на удаленный сервер и далее на указанный remote_port.

Переадресация удаленного порта — на удаленном сервере можно получить доступ к локальной службе, подключившись к http://localhost:remote_port.

Динамическая переадресация портов — настройте свои приложения (например, веб-браузеры) на использование SOCKS-прокси по адресу localhost:local_port. Это позволит направлять весь сетевой трафик через удаленный сервер.

Шаг 4: Закрытие SSH-туннеля

Чтобы закрыть SSH-туннель, просто прервите SSH-соединение, нажав Ctrl+C в терминале, в котором был создан туннель.

Как исправить ошибку аутентификации SSH

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

Ошибки: базовый случай

Если в терминале появилось сообщение «authentication failed», это означает, что процесс проверки подлинности пользователя не удался. Аутентификация — это процедура, которая требуется для подтверждения личности пользователя и предоставления доступа к системе. Например, для удаленного подключения к серверу по адресу может быть настроено SSH-соединение, которое требует прохождения аутентификации.

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

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

Ошибки: использование пароля

«Authentication failed» сообщает о неудачной попытке проверки подлинности пользователя, необходимой для получения доступа к системе. Часто аутентификация требуется для удаленного подключения к серверу через SSH-соединение. Метод аутентификации, используемый по умолчанию, — парольный, но можно настроить аутентификацию с помощью ключевой пары SSH. При этом закрытая часть ключа хранится на компьютере пользователя, а открытая на сервере. Если ключи совпадают, то пользователь получает доступ, в противном случае появляется сообщение об ошибке, например, «authentication failed». Однако, несовпадение ключей не является единственной причиной ошибки — ее причинами также могут быть поврежденные файлы конфигурации или недостаточные права доступа.

Ошибки: ключи

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

Также возможна ошибка «Too many authentication failures for user», которая возникает, когда клиент SSH пытается подключиться к хосту со всеми доступными ключами, превышая максимальное количество разрешенных попыток. Чтобы исправить это, можно использовать опции IdentitiesOnly и IdentityFile.

Если при использовании ключей SSH возникает ошибка «Permission denied (publickey, password)», то это может быть связано с неправильно введенной парольной фразой. Если парольная фраза была потеряна, ее нельзя восстановить, и потребуется сгенерировать новую пару значений для Secure Shell.

Для более удобного использования опций IdentitiesOnly и IdentityFile можно установить их в конфигурационном файле SSH ~/.ssh/config. Это позволит SSH использовать только указанные идентификаторы при подключении к хостам.

Восстановление публичного ключа

Если вы потеряли открытую часть из пары ключей, не волнуйтесь, так как ее можно легко восстановить с помощью стандартных инструментов OpenSSH.

Для этого вы можете воспользоваться утилитой ssh-keygen. Просто откройте терминал и выполните следующую команду:

  • ssh-keygen -y -f ~/.ssh/id_rsa

В этой команде замените ~/.ssh/id_rsa на путь к файлу вашего закрытого ключа. В результате вы получите открытую часть вашего ключа, которую затем можно добавить на сервер.

Если вы используете среду Windows, вы можете достичь того же результата с помощью утилиты PuTTYgen, которая входит в пакет PuTTY. Просто загрузите свой закрытый ключ в утилиту с помощью кнопки Load, а затем скопируйте открытый ключ, отображаемый в поле Public key for… (Открытый ключ для…).

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

Ошибки конфигурации клиента

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

Конфликт конфигурационного файла

Убедитесь, что настройки в файле /etc/ssh/sshd_config не противоречат друг другу. Например, если аутентификация по паролю отключена или вход root запрещен, могут возникнуть конфликты.

Обычный пример конфликта — когда параметр PasswordAuthentication установлен в yes, а параметр PermitRootLogin установлен в no или without-password. Это может привести к тому, что сервер не сможет аутентифицировать пользователей, и установит запрет на  доступ всем.

Права доступа

OpenSSH — это безопасный протокол для удаленного доступа к серверам, который применяет строгие правила владения и разрешения для файлов. Для обеспечения безопасного доступа важно проверить и установить соответствующие разрешения как на стороне сервера, так и на стороне клиента.

На стороне сервера должны быть установлены следующие разрешения:

  •     Каталог ~/.ssh должен иметь разрешение 700.
  •     Директория ~/.ssh должна принадлежать текущему пользователю.
  •     Файл ~/.ssh/authorized_keys должен иметь разрешение 600.
  •     Файл ~/.ssh/authorized_keys должен принадлежать текущему пользователю.

Аналогично, на стороне клиента необходимо проверить следующие разрешения:

  •     Файл ~/.ssh/config должен иметь разрешение 600.
  •     Файлы ~/.ssh/id_* должны иметь разрешение 600.

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

Кроме того, OpenSSH больше не поддерживает использование старых типов ключей, основанных на алгоритме цифровой подписи (DSA), для безопасных серверных соединений. Ключи, использующие алгоритм ssh-dss, считаются слишком слабыми для обеспечения надежной защиты.

Для пользователей со старыми ключами оптимальным решением является генерация и добавление новых ключей на основе более безопасных алгоритмов. Однако в качестве альтернативы можно изменить файл /etc/ssh/sshd_config и установить параметр PubkeyAcceptedKeyTypes на «+ssh-dss», чтобы продолжать использовать ключи на основе DSA. Этот подход несет свои риски.

Дополнительные параметры могут потребоваться на SSH-клиенте при подключении к устаревшим серверам, которые давно не обновлялись. Например, для подключения к хостам CentOS 6, поддержка которых закончилась в конце 2020 года, пользователи должны добавить параметр «-oHostKeyAlgorithms=+ssh-dss», чтобы решить любые проблемы.

Сторонние сервисы

Проблемы аутентификации могут возникать и при использовании сторонних сервисов. Например, при подключении к API возникает сообщение user authorization failed invalid session. Устранение такого сбоя в частном порядке невозможно, стоит написать в техническую поддержку.

Как пользоваться SSH

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

SSH (Secure Shell) — это протокол, позволяющий осуществлять удаленный доступ к устройствам с операционной системой Linux, таким как компьютеры, серверы, телефоны и др. Это набор правил, который позволяет установить безопасное соединение с устройством, расположенным в любой точке мира.

Название протокола содержит слово «secure», что означает, что обмен данными между устройствами происходит в зашифрованном виде. Это позволяет работать с чувствительной информацией, такой как пароли, коды доступа и другие конфиденциальные данные.

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

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

Вход в систему с помощью ключей

Использование пароля для входа на сервер через SSH небезопасно и неудобно. Во-первых, пароль можно взломать методом грубой силы. Во-вторых, есть риск случайной утечки, так как может быть несколько устройств с разными паролями, которые сложно запомнить. И в-третьих, утомительно вводить пароль каждый раз перед началом сеанса.

Самый безопасный способ входа в систему — использование пары ключей RSA.

Сначала ключи необходимо создать на локальном компьютере с помощью команды:

  • ssh-keygen -t rsa

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

Далее открытый ключ необходимо отправить на сервер. Открытый ключ обозначается суффиксом .pub и должен иметь права на чтение для всех пользователей:

  • ssh-copy-id -p 222 -i ~/.ssh/id_rsa.pub remote@example.com

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

Вы можете еще больше повысить безопасность, полностью отключив парольный доступ. Для этого отредактируйте файл /etc/ssh/sshd_config и установите следующие директивы:

  • PasswordAuthentication no — отключает вход по паролю.
  • PubkeyAuthentication yes — разрешает аутентификацию по ключу SSH.
  • ChallengeResponseAuthentication no — отключает аутентификацию PAM.

После обновления файла перезагрузите демон SSH:

  • sudo systemctl перезагрузить ssh

Настройка SSH

Для установления соединения на удаленном устройстве должен быть запущен сервер sshd, который запускается в Ubuntu с помощью диспетчера systemd:

  • sudo systemctl запустить ssh

Конфигурацию сервера sshd можно найти в файле /etc/ssh/sshd_config.

Порт. По умолчанию sshd прослушивает изменения на порту 22. Хакеры часто пытаются получить доступ к вашему устройству путем подбора паролей суперпользователя, таких как root, admin и т. д. Вы можете сделать это более сложным, изменив порт по умолчанию на любой другой с помощью директивы Port. Однако это не гарантирует полной безопасности, так как существуют скрипты, сканирующие порты устройства. Они обнаружат порт, который прослушивает демон sshd, и попытаются получить доступ. Для большей безопасности рекомендуется закрыть доступ по SSH для пользователя root.

Доступ суперпользователя. Поскольку SSH в основном используется для администрирования удаленных серверов Linux, удаленный доступ для суперпользователя root разрешен по умолчанию во всех современных системах. Однако это очень небезопасно, так как хакеры могут попытаться подобрать пароль и, если им удастся проникнуть в систему, получить полный контроль над устройством. Чтобы избежать таких сценариев, используйте директиву PermitRootLogin со значением «нет».

Протокол. SSH может работать с использованием двух версий протокола — 1 и 2. Вторая поддерживает больше методов шифрования и методов аутентификации. Если вы хотите использовать только одну из версий, используйте директиву Protocol: Protocol 2.

Доступ для конкретных пользователей. Для дальнейшего повышения безопасности вы можете разрешить удаленный доступ только для определенных пользователей и групп, используя директивы AllowUsers и AllowGroups соответственно. Например, вы можете запретить доступ к серверу всем, кроме администраторов:

Вы также можете запретить доступ определенным пользователям, используя DenyUsers и DenyGroups.

Протоколирование ошибок. Вы можете установить уровень ведения журнала с помощью директивы LogLevel, которая отвечает за уровень содержимого в системном журнале, т. е. насколько подробно sshd будет сохранять сообщения, которые он регистрирует. По умолчанию используется INFO, но в целях отладки вы можете установить для него значение VERBOSE или полностью отключить ведение журнала с помощью QUIET.

Доступ по паролю. Директива PasswordAuthentication отвечает за возможность доступа к удаленному устройству с помощью пароля со значением по умолчанию «да».

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

  • sudo systemctl перезагрузить ssh

SSH клиенты

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

  1. PuTTY
  2. WinSCP
  3. Termius
  4. FileZilla — для передачи данных по SFTP
  5. MobaXterm

Синтаксис

Для удаленного подключения к серверу необходимо использовать команду SSH, указав IP-адрес или доменное имя сервера:

  • ssh example.com

Однако, если имена пользователей на локальной и удаленной системах отличаются, нужно явно указать имя пользователя при подключении:

  • ssh remote@example.com

Сеанс можно завершить с помощью команды exit.

Если во время настройки удаленного сервера был задан порт, отличный от 22, то для подключения к серверу с локального устройства необходимо указать этот порт с помощью флага -p:

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

Если на удаленном сервере настроен демон sshd, то можно использовать другие утилиты, работающие на основе протокола SSH. Одна из таких утилит — scp, которая использует протокол RCP для передачи файлов.

Для передачи файла filename.txt на удаленное устройство с адресом example.com и размещения его в каталоге ~/trash/txt, нужно использовать следующую команду:

  • scp filename.txt remote@example.com:~/trash/txt

Если поменять местами локальный путь и сервер, то можно скачать файлы с удаленного сервера на локальное устройство.

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

Допустим, нужно скопировать каталог images с сервера на локальный компьютер в папку documents:

  • scp -r remote@example.com:~/images ~/documents/

Также можно передавать файлы между двумя удаленными машинами, указав путь подключения к серверу вместо локальных файлов.

SSH-туннелирование

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

Для установки порт-туннеля через удаленный сервер используйте флаг -L. Рассмотрим пример использования, когда необходимо получить доступ к удаленной базе данных MySQL, которая доступна только на локальном порту 3306.

Для создания туннеля выполните следующую команду:

  • ssh -N -L 53306:127.0.0.1:3306 remote@example.com

В данной команде флаг -N указывает, что на удаленном сервере не нужно выполнять команды. 53306 — это локальный порт, который вы выбираете, и который будет использоваться для доступа к удаленному порту 3306. Адрес 127.0.0.1:3306 указывает на то, что MySQL работает на удаленном сервере на локальном адресе 127.0.0.1 (localhost) и на порту 3306.

Теперь, когда туннель установлен, можно установить безопасное соединение с базой данных MySQL на удаленном сервере, используя локальный порт 53306.

SFTP

SFTP (Secure File Transfer Protocol) — это протокол передачи файлов, который работает по защищенному каналу и является частью OpenSSH, поэтому, если ваш демон SSH работает правильно, вы можете использовать SFTP без какой-либо дополнительной настройки. Основное различие между SFTP и стандартным FTP заключается в том, что SFTP шифрует всю информацию.

Для создания сеанса SFTP используйте те же учетные данные — логин и пароль или ключ — что и для SSH. Кроме того, вы можете указать порт, если вы изменили его с 22 по умолчанию на какой-либо другой порт. Для этого используйте следующую команду:

  • sftp -oPort=222 remote@example.com

После успешной аутентификации вы окажетесь на удаленном сервере и сможете работать с файлами.

SSH-туннели: примеры и функции

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

Структура туннелей

SSH — (secure shell) протокол, предназначенный для обеспечение удаленного управления системами. Главная особенность — наличие шифрования. Туннелирование Secure Shell (SSH) — это метод, используемый для установления безопасного соединения с удаленным компьютером. Он включает переадресацию портов SSH для передачи TCP-пакетов и преобразование заголовков IP для безопасной связи. В отличие от VPN, который позволяет передавать информацию в любом направлении, туннелирование SSH имеет определенную точку входа и выхода для связи. Поэтому важно понимать разницу между SSH и VPN при сравнении двух технологий.

Создание туннеля

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

Ubuntu и другие дистрибутивы Linux/macOS

Терминал:

ssh-keygen -t rsa

Вывод:

Enter file in which to save the key (/home/user/.ssh/id_rsa):

По умолчанию закрытый ключ истории хранится в папке .ssh в файле id_rsa. Однако у вас есть возможность указать другое местоположение и имя файла.

Затем система предложит вам установить пароль для дополнительной защиты ключа. Это важно для предотвращения несанкционированного доступа лиц, имеющих доступ к машине. Это особенно полезно, когда несколько человек используют один и тот же компьютер. Если вам не требуется пароль, просто оставьте поле пустым и нажмите Enter.

Enter passphrase (empty for no passphrase):

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

Your identification has been saved in /home/user/.ssh/id_rsa.

Your public key has been saved in /home/user/.ssh/id_rsa.pub.

The key fingerprint is:

476:b2:a8:7f:08:b4:c0:af:81:25:7e:21:48:01:0e:98 user@localhost

Теперь нужно скопировать публичный ключ и добавить его на удалённую машину. Можно открыть файл /home/user/.ssh/id_rsa.pub через любой текстовый редактор или вывести его содержимое в терминале:

cat ~/.ssh/id_rsa.pub

Скопируйте ключ и добавьте его на сервер. Убедитесь, что в нём нет пробелов и переносов.

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

ssh-copy-id user@remoteserver

Вместо использования параметра HOST соединение с сервером будет установлено с использованием его общедоступного IP-адреса. Если вы не установили пароль для дополнительной защиты закрытого ключа, вводить дополнительную информацию не требуется. Безопасность системы поддерживается за счет использования как открытых, так и закрытых ключей, которые сопоставляются для установления безопасного соединения при обнаружении.

При первом подключении вы получите предупреждение о неизвестном хосте. Система спросит, доверяете ли вы ей. Чтобы продолжить, введите «да» и нажмите клавишу ввода.

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

ssh -N -L -g 3389:192.168.0.105:3389 user@rt.example.com

Windows

Существуют 2 способа установить туннелирование в Windows (консоль и PuTTygen).

Команда для PowerShell:

ssh-keygen -t rsa

У вас есть возможность либо защитить закрытый ключ паролем, либо оставить поле пустым и нажать Enter.

Открытый ключ по умолчанию хранится в файле ~/.ssh/id_rsa.pub, а закрытый ключ с именем id_rsa находится в том же каталоге. Вы можете получить доступ к файлу открытого ключа через текстовый редактор или с помощью команды Cat в PowerShell.

cat ~/.ssh/id_rsa.pub

Скопируйте открытый ключ, перенесите его на сервер. Выполните соединение:

ssh root@HOST

Вместо использования параметра HOST соединение с удаленным сервером будет установлено с использованием его общедоступного IP-адреса. Если вы не установили пароль для дополнительной защиты закрытого ключа, вводить дополнительную информацию не требуется. Система проверит открытый и закрытый ключи, и если они совпадут, в Windows будет установлен SSH-туннель.

При первом подключении может появиться предупреждение о неизвестном хосте. Система предложит вам подтвердить, доверяете ли вы ей. Чтобы продолжить, введите «да» и нажмите Enter.

Чтобы сгенерировать пароль с помощью PuTTygen:

  1. Нажмите кнопку Generate.
  2. Подвигайте курсором в любом направлении до тех пор, пока строка прогресса не заполнится.
  3. Сохраните публичный и приватный ключи.
  4. Откройте файл с публичным ключом. 
  5. Скопируйте публичный ключ и добавьте его на удаленный сервер.

Для подключения также можете использовать PuTTy. Запустите программу, введите исходные данные для подключения.

SSH Proxy

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

Туннелирование:

ssh -D 8888 user@remoteserver

Команда запускает прокси, порт 8888 (служба работает на localhost).

google-chrome —proxy-server=»socks5://192.168.1.10:8888″

В этом случае, вы прослушиваете входящий трафик Wi-Fi/Ethernet.  

Динамический туннель

Сокет TCP на локальном хосте позволяет открыть динамический туннель SSH. Этот тип туннелирования используется в случае, если необходимо создать приватное соединение, но такой возможности нет.

Однократный выход в сеть:

ssh -D 1080 user@vps.example.com

Прокси SOCKS функционирует на порте 1080. Через динамический туннель невозможно открыть порты во внешний периметр. Чтобы настроить туннелирование в PuTTy (Connection — SSH — Tunnels).

Форвардинг портов

Открывается порт на хосте, после также открывается порт на сервере.

ssh  -L 9999:127.0.0.1:80 user@remoteserver

Перенаправление происходит через 80 порт.

Reverse-tunnel

ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

Перенаправление в обратном порядке (1999 порт — 902 порт). 

Удаленное выполнение команд

ssh remoteserver «cat /var/log/nginx/access.log» | grep badstuff.php

выполнение grep

Rsync

tar -cvj /datafolder | ssh remoteserver «tar -xj -C /datafolder»

Создание резервной копии, распаковка копий на другом оборудовании 

Команда для регулярного создания копий:

rsync -az /home/testuser/data proglibserver:backup/

Rsync перед изготовлением копии просматривает историю бэкапов, чтобы избежать повторения.

Запуск приложений

ssh -X remoteserver vmware

Пример команды, запускается vmware. 

Прыжки по хостам

При наличии сегментированности в сети, нужно проложить туннель через все пункты, чтобы обезопасить канал передачи данных. Параметр -J поможет установить цепочку переадресаций:

ssh -J host1,host2,host3 user@host4.internal

Локальная папка на удаленной машине

sshfs user@proglibserver:/media/data ~/data/

sshfs свяжет каталог с сервером

Как подключиться к серверу по SSH?

SSH — протокол, предназначенный для обеспечения дистанционного управления ОС. Удаленное подключение возможно осуществить к любой серверной машине, на которая управляется ОС из группы Linux. В Windows существует аналогичная возможность, используется другой протокол — RDP. 

Доступ к серверу

Чтобы подключиться по SSH, необходимо знать IP и данные учетной записи администратора. Эти данные вы можете найти на электронной почте, которую использовали для активации VDS.

Подключение SSH с устройства Windows

Используем puTTY. 

  1. Скачайте утилиту (https://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
  2. Откройте putty.exe

Порт должен быть 22, Тип Соединения — SSH. Host Name установите IP-адрес сервера. Нажмите Open.

Приложение предупредит вас о подключении к новому серверу. Выберите Да.

Осуществите подключение к серверу в режиме администратора (root — логин).

Далее вам необходимо ввести пароль. Пароль вводится в слепом (безопасном режиме), поэтому не обращайте внимание на отсутствие символов. В случае, если вы ошиблись, увидите сообщение Access denied. После успешного входа, вы увидите символику терминала в консоли:

Как подключиться к серверу по SSH с компьютера на Linux/MacOS

Найдите в Spotlight Терминал.

Подключение по SSH:

  • ssh username@ip_adress

username замените на логин пользователя в вашем случае, ip-address — IP сервера, к которому необходимо подключиться. Команда для нестандартного порта:

  • ssh username@ip_adress -p 22

Далее, введите пароль, подтвердите подключение. Нажмите Enter, если все в порядке, перед вами появится символика терминала виртуального сервера.

Создание SSH-ключа, чтобы авторизироваться на сервере

В этом руководстве мы рассмотрим процесс создания ключа SSH в OS Linux и Windows. Этот ключ необходим для подключения к виртуальному серверу на базе Linux OS.

Как работает?
При соединении с каким-либо элементом веб-инфраструктуры обычно используются стандартные ключи — пароли. Авторизация с помощью SSH-keys проходит без введения пароля. Дело в том, что пароли чаще поддаются компрометированию, а ключи почти неуязвимы к краже.

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

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

ssh-keygen -t rsa 

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

На скриншоте видно, что ключи записались в директории. 

Генерируем ключи OS Windows
Установите программу PuttyGen. 

Выберите тип ключей «RSA». Значение Number of bits in generated key — 2048. Сгенерируйте (Generate). Key passphrase — кодовая фраза. Двухфакторная авторизация нужна для обеспечения конфиденциальности ключей. Но при этом, каждое подключение требует повторного ввода сид-фразы. Повторите кодовую фразу и сохраните ключи. 

Ключи и панель управления
В настройках есть пункт SSH-ключи, выберите «Добавить SSH-ключ». Затем установите имя для пары ключей и вы увидите поле, подписанное как «Код ключа». 

SSH соединение
При настройке сервера не забудьте включить опцию «Подключение с SSH-ключом»

 

Как копировать файлы и запускать команды через SSH

Управлять *nix серверами можно через подключение с помощью протокола безопасного входа SSH (Secure Shell). Его используют, когда нужно загрузить или выгрузить файл на удаленном сервере. Популярность SSH-подключения обусловлена тем, что действия с файлами через защищенное соединение  полностью безопасно и не вызывает сложностей. Это одна из базовых функций SSH, которая реализуется или через команду scp в Linux-системах или с помощью pscp.exe в составе SSH-клиента Putty для Windows.

Как копировать файлы на удаленном сервере через протокол SSH 

Работа с файлами на ОС семейства Linux

Для работы с файлами необходимо использовать команды такого формата:

scp [модификатор] [источник] [место назначения]

Если для работы используется удаленный сервер, применяют формат параметра, в котором прописываются пользователь и путь к файлу:

[пользователь]@[сервер]:[путь_к_файлу]

Пароль от аккаунта на удаленном сервере вводят уже после того, как команда будет запущена.

Следующая команда позволяет скопировать локальный файл /home/user/file.tgz в домашний каталог на удаленном сервере. Перед вводом нужно заменить 123.123.123.123 на реальный IP-адрес сервера.

scp /home/user/file.tgz root@123.123.123.123:/root

Для того, чтобы скачать файл с удаленного сервера, нужно ввести следующую команду:

scp root@123.123.123.123:/root/file.tgz /home/user

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

scp file1.tgz file2.tgz root@123.123.123.123:/root

Скопировать весь каталог, включая все файлы и подкаталоги, можно с помощью модификаторов команды –r.  При этом файлы рекурсивно перенесутся из источника в место назначения. Вот пример команды, с помощью которой можно скопировать локальный каталог /home/user/dir на удаленный сервер:

scp –r /home/user/dir root@123.123.123.123:/root

Для SSH-серверов, использующих нестандартные порты, нужно использовать опцию –P. Вот так будет выглядеть команда для подключения к удаленному серверу через порт 10022:

scp –P 10022 /home/user/file.tgz root@123.123.123.123:/root

Если запустить scp без указания параметров, появится справка о том, какие еще модификаторы поддерживает команда. 

 

Работа с файлами на ОС семейства Windows

Пользователи операционной системы Windows и клиента для работы с сетевыми протоколами удаленного доступа Putty могут использовать те же форматы команды, что и пользователи Linux. Единственное отличие — в названии исполняемого файла и в необходимости использовать синтаксис указания путей к файлам и каталогам Windows. 

После запуска командной строки (cmd.exe) или PowerShell нужно перейти в каталог, в котором находится файл pscp.exe. Здесь нужно ввести следующую команду:

pscp.exe C:Tempfile.tgz root@123.123.123.123:/root

Для запуска из другой папки нужно прописать весь путь к pscp.exe. При этом, если в записи содержатся пробелы, необходимо взять ее в двойные кавычки:

“C:Program FilesPuttypscp.exe” C:Tempfile.tgz root@123.123.123.123:/root

Как и в запуске на Linux, для получения информации о синтаксисе команды и поддерживаемых модификаторах необходимо запустить pscp.exe без указания параметров. 

 

Как запускать команды на удаленном сервере через протокол SSH

Протокол SSH может не только выполнять работу в интерактивном режиме, но и поддерживать единичный запуск команд на удаленном сервере. Разберем, как это делается на Linux и Windows.

Запуск команд через SSH на ОС семейства Linux

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

ssh [пользователь]@[сервер] ‘[команда]’

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

ssh root@123.123.123.123 ‘uname -a’

За один сеанс можно запустить несколько команд. Для этого нужно разделить разные команды с помощью символа “;” в качестве разделителя. Так будет выглядеть проверка сетевых настроек и активных подключений на удаленном сервере:

ssh  root@123.123.123.123 ‘ifconfig; netstat -anp tcp’

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

ssh  root@123.123.123.123 ‘bash -s’ < /home/user/myscript.sh

После введения этой команды на удаленном сервере запустится локальный файл /home/user/myscript.sh.

Как и при работе с файлами, справка о синтаксисе и перечень модификаторов для расширения функциональности команды вызывается при запуске команды SSH без параметров.

Запуск через SSH на ОС семейства Windows

Подключение к удаленному серверу с устройства под управлением операционной системы Windows происходит с помощью клиента Putty. В его состав входит файл plink.exe, с которым можно работать прямо из командной строки (cmd.exe) или через кроссплатформенное средство автоматизации от Microsoft PowerShell.

 

Чтобы запустить команду на удаленном сервере нужно ввести:

plink.exe [сервер] -ssh -l [пользователь] “[команда]”

Конфигурацию сетевых интерфейсов можно проверить с помощью команды:

plink.exe 123.123.123.123 -ssh -l root “ifconfig”

При одновременном запуске нескольких команд через plink.exe, как и в Linux для их разделения используют “;”:

plink.exe 123.123.123.123 -ssh -l root “ifconfig; netstat -anp tcp”

При этом команды из локального файла можно запустить с помощью дополнительного ключа -m:

plink.exe 123.123.123.123 -ssh -l root -m “C:Tempmyscript.sh”

Теперь останется запустить команду plink.exe без параметров, чтобы посмотреть информацию о синтаксисе и дополнительные модификаторе команды.

 

Использование SSH позволяет применять единый подход к подключению к серверам для разных машин, увеличить скорость подключения и работы с удаленной машиной, а также упростить настройки.