SSH (Secure Shell) – это сетевой протокол, который обеспечивает безопасное удаленное соединение между двумя системами. Ssh (Secure Shell — «безопасная оболочка») – это протокол прикладного уровня в операционной системе «Линукс», который обеспечивает удаленный доступ управления персональным компьютером. Чаще всего такой протокол используется при удаленном управлении серверами с помощью терминала. Если вы являетесь администратором на нескольких серверах, обладаете обширными знаниями в области веб-программирования, команда SSH должна быть знакома.

Оглавление

Что такое SSH

SSH (Secure Shell) — это сетевой протокол, предназначенный для удалённого управления сервером и передачи данных по зашифрованным TCP соединениям. Большинство хостингов, даже виртуальных, сегодня предоставляет доступ как по FTP, так и по SSH. На мой взгляд, это здорово, SSH намного удобнее и безопаснее в использовании.

“Оболочка” и учётная запись “оболочки”

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

Shell (оболочка) компьютера, является частью программного обеспечения, которое позволяет пользователю напрямую взаимодействовать с ядром различных операционных систем. “Оболочка” может иметь графический интерфейс и/или интерфейс командной строки (т.н. консоль).

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

Протокол защищённой оболочки (SSH – Secure Shell Protocol)

На подобии веб-браузеров использует протокол HTTP для общения с веб-сайтами, для учетной записи оболочки требуется определенный протокол, позволяющий осуществлять обмен данными между двумя сетевыми устройствами. Этот протокол называется SSH –  Secure Shell Protocol.

SSH использует шифрование с открытым ключом и был разработан в качестве замены Telnet и других небезопасных протоколов. Две основные версии, SSH-1 и SSH-2, в настоящее время являются доминирующими протоколами для доступа к учетным записям оболочки.

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

Клиенты SSH доступны для всех основных операционных систем. Системы на основе Unix, включая Linux и Mac OS X, могут использовать OpenSSH. Также ознакомьтесь с сайтом OpenSSH для поиска альтернатив для систем Mac OS и Windows. PuTTY – один из самых известных клиентов SSH для Windows.

Протокол безопасной передачи файлов (SFTP) и FTP

Приложения для передачи файлов и VPN по умолчанию не используют шифрование (SSH), но используют SFTP – протокол передачи файлов SSH. Напомним, что SFTP – это не протокол FTP, работающий через SSH, а другой протокол передачи файлов, разработанный как расширение для SSH-2. SFTP всегда используется для передачи файлов по SSH, но на самом деле он спроектирован так, что его можно использовать в соответствии с другими протоколами.
Хоть это и не указано в документации для конечного пользователя, SFTP можно рассматривать как надежного родственника FTP. Последний передает все данные в виде простого текста. Таким образом, перехват пакетов может раскрыть важные и личные данные, включая ваше имя пользователя и пароль! SFTP, являясь расширением SSH-2, использует защиту с помощью открытого ключа. Это означает, что данные зашифрованы, когда они передаются, и потенциальные перехваты относительно бесполезны.

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

Синтаксис

Рассмотрим синтаксис команды.

ssh [опция] [пользователь]@[название хоста] [команда]

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

Основные опции:

  • «g» – для разрешения удаленной машине пользоваться определенным локальным портом.
  • «l» – для изменения/введения имя пользователя в определенной системе.
  • «f» – аргумент переводит режим работы в фоновый.
  • «n» – для перенаправления классического вывода.
  • «p» – для изменения/введения данных о локальном порту SSH, используемом на удаленной машине.
  • «q» – для исключения вероятности показа сообщений о возникающих ошибках.
  • «v» – для включения специального режима отладки.
  • «x» – для отключения перенаправления X11.
  • «X» – для включения перенаправления Х11.
  • «C» – для включения сжатия.

Представленный выше список является неполным. На самом деле команда ssh поддерживает в разы больше опций, а описанные варианты используются чаще всего. Стоит заметить, что большинство настроек можно водить с использованием файла «ssh/config».

Опции команды SSH

Теперь давайте рассмотрим самые основные опции команды ssh:

  • f – перевести ssh в фоновый режим;
  • g – разрешить удаленным машинам обращаться к локальным портам;
  • l – имя пользователя в системе;
  • n – перенаправить стандартный вывод в /dev/null;
  • p – порт ssh на удаленной машине;
  • q – не показывать сообщения об ошибках;
  • v – режим отладки;
  • x – отключить перенаправление X11;
  • X – включить перенаправление Х11;
  • C – включить сжатие.

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

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

В зависимости от операционной системы, установленной на вашем домашнем компьютере (не путайте с ОС хостинга), для SSH подключения к серверу Linux-хостинга возможны следующие варианты:

  • если на вашем компьютере установлена ОС Windows, то подключение происходит через Putty,
  • для ОС Linux и macOS на компьютере доступно подключение к SSH через терминал.

Windows Linux macOS

Для подключения по SSH в ОС Windows мы рекомендуем использовать SSH-клиент PuTTy. Скачать клиент можно на официальном сайте (англоязычная версия).

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

  1. 1.Запустите программу PuTTY.
  2. 2.

    На странице с основными настройками сеанса PuTTY, в поле «Host Name» введите IP-адрес сервера.

    Как узнать IP-адрес сервера

    IP-адрес сервера указан в информационном письме, отправленном на контактный e-mail после заказа хостинга. Также данная информация продублирована в Личном кабинете. Авторизуйтесь на сайте REG.RU и кликните по нужной услуге хостинга. IP-сервера указан на вкладке «Доступы»:

    подключение по ssh шаг

    подключение по ssh шаг 2

    Если вы уже делегировали домен на сервер, вместо IP-адреса можно указать домен. Также в качестве хоста можно использовать технологический домен.

  3. 3.

    При первом подключении к серверу появится окно «Предупреждение безопасности PuTTY». Нажмите Да:

    подключение по ssh шаг 3

  4. 4.

    В открывшемся окне PuTTY введите ваш логин услуги хостинга вида «u1234567». Нажмите Enter. Затем введите ваш пароль от услуги хостинга и нажмите Enter. В целях безопасности вводимый пароль не отображается на экране в виде символов. Набирая пароль, вы не увидите на экране ни самого пароля, ни звёздочек.

    Чтобы вставить скопированный логин и пароль в окно PuTTy, нажмите Shift + Insert.

    Как узнать логин и пароль услуги хостинга

    Логин и пароль услуги хостинга указаны в информационном письме, отправленном на контактный e-mail после заказа хостинга. Также данная информация продублирована в Личном кабинете. Авторизуйтесь на сайте REG.RU и кликните по нужной услуге хостинга. Логин и пароль указаны на вкладке «Доступы»:

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

    подключение по ssh шаг 4

Готово, как только вы подключитесь по SSH, вы окажетесь в домашнем каталоге вашего хостинга. Консольные команды Linux представлены по ссылке. Обратите внимание: многие из этих команд выполнить на виртуальном хостинге не получится (установка и удаление пакетов, монтирование файловых систем и др.), так как у вас нет root-доступа.

Для ОС Linux доступ по SSH осуществляется через терминал, который уже предустановлен в самой системе.

  1. 1.

    Запустите терминал:

    • в Unity (Ubuntu): «Главное меню» — в поисковой строке введите слово «Терминал». Либо просто нажмите комбинацию клавиш: Ctrl+Alt+T,
    • в Xfce (Xubuntu): «Главное меню» — «Приложения» — «Система» — «Терминал»,
    • в KDE (Kubuntu): «Главное меню» — «Приложения» — «Система» — «Терминал».
  2. 2.

    Введите команду:

    ssh u1234567@123.123.123.123

    Где:

    • u1234567 — логин учётной записи хостинга (Как узнать логин и пароль услуги хостинга?,
    • 123.123.123.123 — IP-адрес сервера (Как узнать IP-адрес сервера?).
  3. 3.Нажмите Enter, введите пароль услуги хостинга.

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

  1. 1.Запустите терминал. Для этого нажмите Cmd + Пробел, введите в поисковой строке Терминал и нажмите Enter.
  2. 2.

    Введите команду:

    ssh логин@123.123.123.123

    Где:

    • логин ― логин учетной записи хостинга,
    • 123.123.123.123 ― IP-адрес сервера.

    Нажмите Enter.

  3. 3.

    Если подключение к устройству происходит впервые, то появится предупреждение о том, что ключ сервера не кешируется в реестре. Введите Yes и нажмите Enter:

    Как зайти по SSH на macOS

  4. 4.

    Введите пароль учетной записи.

    Обратите внимание, в целях безопасности пароль, который вы вводите, не отображается на экране ни в виде самого пароля, ни в виде звёздочек:

    Как зайти по SSH на macOS 2

Готово, вы подключились к виртуальному серверу по SSH. Чтобы сбросить подключение, введите команду exit или закройте терминал.

Можно ли создать дополнительного SSH-пользователя

На Hosting Linux подключение по SSH возможно только под основным логином хостинга (вида u1234567). Создать дополнительного пользователя SSH нельзя.

Как отключить доступ по SSH

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

Как создать архив по SSH

Создание архива tar.gz

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

tar -czvf name.tar.gz path/folder-name/

  • Данная команда создаст архив папки path/folder-name/. Название архива — name.tar.gz,
  • все файлы будут сжаты при помощи gzip,
  • в процессе создания архива будет показан процесс архивации. Если данная информация вам не нужна, уберите ключ «v» из команды.

Разархивация происходит при помощи команды:

tar -xzvf name.tar.gz

Создание архива zip

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

zip -r имя-архива.zip /путь-к-папке # пример zip -r log.zip /var/log

В результате команды из примера будет создан архив папки /var/log со всем её содержимым. Имя созданного архива: log.zip. Разархивировать можно будет при помощи команды:

unzip имя-архива.zip

Установка пакетов SSH

Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
В Ubuntu

$ sudo apt-get install ssh

В CentOS

$ yum -y install openssh-server openssh-clients

После чего начнется процесс установки

Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
$ systemctl status sshd
или:
$ service sshd status даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.

Как подключиться по SSH с помощью ключа

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

Генерация (создание) SSH-ключа

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

Чтобы создать ключ, нужно ввести команду ssh-keygen -f /папка/где/создать/ключ. В примере мы будем использовать самую распространенную папку для ключей, которая находится в домашней папке пользователя: /home/имя_пользователя/.ssh/название_ключа или ее укороченной версией ~/.ssh/название_ключа:

ssh-keygen -f ~/.ssh/server-key

После ввода утилита попросит задать пароль для ключа. Здесь довольно важный момент. Можно вовсе не задавать пароль и просто нажать Enter. В таком случае подключение к серверу будет осуществляться только по ключу и без всякого ввода пароля.

Но в примере мы будем «параноиками» и зададим пароль на использование ключа. Придумаем именно отдельный пароль, не тот, что от пользователя сервера. Можно выбрать вариант проще, который возможно будет без труда запомнить и ввести вручную, например brandy-coin-13!. Его мы будем в будущем вводить каждый раз, как потребуется использовать ключ. И так, задаем…

ssh-keygen -f ~/.ssh/server-key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase):

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

[email protected]:~$ ssh-keygen -f ~/.ssh/server-key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/uxumax/.ssh/server-key. Your public key has been saved in /home/uxumax/.ssh/server-key.pub. The key fingerprint is: SHA256:RX489Wcrb1rt/CRlEs08D8T5Wn//qydYZOpOlIs+cGE [email protected] The key’s randomart image is: +—[RSA 2048]—-+ | . .o. | | o . oo= | | o + ooB| | E ..+ +B| | S .o+..+=| | . .o…+++| | o..oo .+=| | …o .+*.| | .o. o+.O| +—-[SHA256]—–+ [email protected]:~$

В выводе строка с текстом Your identification has been saved in говорит в какой именно папке сохранился ключ.

Добавление ключа в список доверенных на сервере

В предыдущем этапе мы только создали ключ. Пока он не подходит ни к одному серверу. Чтобы использовать его для входа на наш сервер, необходимо добавить его в список доверенных ключей на этом сервере. Звучит сложно, но на самом деле все обходится лишь одной командой, которая содержит путь до ключа, логин и IP-адрес сервера в своих опциях и имеет такой вид: ssh-copy-id -i /путь/до/ключа логин@IP-адрес.

ssh-copy-id -i ~/.ssh/server-key [email protected]

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

[email protected]:~$ ssh-copy-id -i ~/.ssh/server-key [email protected] /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/home/uxumax/.ssh/server-key.pub” /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys [email protected]’s password: Number of key(s) added: 1 Now try logging into the machine, with: “ssh ‘[email protected]'” and check to make sure that only the key(s) you wanted were added. [email protected]:~$

Подключение к серверу по ключу

Теперь можно подключаться к серверу, используя ключ. Для этого вводим команду, которая содержит логин, IP-адрес сервера и путь до ключа с опцией -i: ssh логин@IP-адрес -i /путь/до/ключа

ssh [email protected] -i ~/.ssh/server-key

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

[email protected]:~$ ssh [email protected] -i ~/.ssh/server-key Enter passphrase for key ‘/home/uxumax/.ssh/server-key’: Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. [email protected]:~#

Клиент SSH Windows

Одной из самых популярных программ для работы c Linux серверами по SSH в Windows является программа Putty. Скачать данный SSH клиент Windows можно по данному адресу — putty.org.

Подключение по SSH по паролю в Windows

Подключение в Putty по SSH очень простое! Вводим IP адрес, если меняли порт, то указываем другой порт и нажимаем Open:Как пользоваться SSH
и после подключения логин и пароль!

Подключение по SSH по ключу в Windows

Если вам не хочется вводить каждый раз пароль, а использовать ключ ssh в Putty, то, как и в Linux, сначала необходимо создать ключ, а после перенести его на сервер.

Создаем ключ

  1. Скачайте еще одну программу PuttyGen и запустите ее
  2. Нажмите кнопку «Generate» и вводите мышку по сторонам, для того чтобы создался ключКак пользоваться SSH
  3. После создания ключа нажимаем «Save Privat Key» и указываем место сохранения, сохраняем с расширением .ppkКак пользоваться SSH
  4. Копируем весь ключ в буфер обмена с самой первой строки ssh-rsa:Как пользоваться SSH

Программу пока не закрываем и запускаем Putty для подключения

Перенос ключа

  1. Сохраняем наш Linux сервер в сессиях следующим образом:
    • Указываем ИмяПользователя@IPадрес
    • чуть ниже название подключенияКак пользоваться SSH
  2. Подключаемся к серверу
  3. Переходим в директорию ./ssh: cd ~/.ssh/
  4. Далее с помощью редактора nano откройте документ authorized_keys для редактирования   nano authorized_keysи добавьте ранее сгенерированный ключ в данный файл и сохраните данныеКак пользоваться SSH
  5. Закройте Putty SSH
  6. Откройте Putty, нажмите кнопку «Load»
  7. Далее в настройках SSH -> Auth укажите путь до файла ключа.ppkКак пользоваться SSH
  8. Нажмите Open, после чего запустится сеанс на сервере без использования ключа!

Устанавливаем SSH-server в Ubuntu

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

Шаг 1: Загрузка и установка SSH-server

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

    1. Запустите консоль через меню или зажав комбинацию Ctrl + Alt + T.

Переход к работе в терминале Ubuntu

    1. Сразу же начните скачивание файлов сервера с официального репозитория. Для этого потребуется ввести sudo apt install openssh-server, а затем нажать на клавишу Enter.

Скачивание SSH с официального репозитория в Ubuntu

    1. Поскольку мы используем приставку sudo (выполнение действия от имени суперпользователя), вам потребуется ввести пароль от своей учетной записи. Учтите, что символы при вводе не отображаются.

Ввод пароля для скачивания SSH в Ubuntu

    1. Вы будете уведомлены о скачивании определенного объема архивов, подтвердите действие, выбрав вариант Д.

Подтвердить добавление архивов для SSH в Ubuntu

    1. По умолчанию клиент устанавливается вместе с сервером, но не лишним будет убедиться в его наличии, попытавшись инсталлировать его повторно с помощью sudo apt-get install openssh-client.

Установить клиент SSH в случае его отсутствия в Ubuntu

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

Шаг 2: Проверка работы сервера

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

    1. Запустите консоль и пропишите там sudo systemctl enable sshd, чтобы добавить сервер в автозагрузку Ubuntu, если вдруг этого не случилось автоматически после установки.

Добавить SSH в автозагрузку ОС Ubuntu

    1. Если вам не нужно, чтобы инструмент стартовал вместе с ОС, удалите его с автозапуска путем ввода sudo systemctl disable sshd.

Удалить SSH из автозагрузки Ubuntu

    1. Теперь проверим, как производится подключение к локальному компьютеру. Примените команду ssh localhost (localhost — адрес вашего локального ПК).

Подключиться через SSH к локальному компьютеру

    1. Подтвердите продолжение подключения, выбрав вариант yes.

Подтвердить подключение к локальному компьютеру Ubuntu

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

Подключиться к 0.0.0.0 через SSH в Ubuntu

    1. При каждом новом соединении необходимо будет его подтверждать.

Подтвердить подключение к адрусу по умолчанию в Ubuntu

Как видите, команда ssh используется для подключения к любому компьютеру. Если у вас появилась надобность соединиться с другим устройством, просто запускайте терминал и вводите команду в формате ssh имя_пользователя@ip_адрес.

Шаг 3: Редактирование файла конфигурации

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

    1. Первоочередно сохраните резервную копию файла конфигурации, чтобы в случае чего обратиться к нему или восстановить исходное состояние SSH. В консоль вставьте команду sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original.

Создать резервную копию файла конфигурации SSH в Ubuntu

    1. Затем вторую: sudo chmod a-w /etc/ssh/sshd_config.original.

Вторая команда для резервной копии SSH в Ubuntu

    1. Запуск файла настроек выполняется через sudo vi /etc/ssh/sshd_config. Сразу же после ввода он будет запущен и вы увидите его содержание, как показано на скриншоте ниже.

Запуск файла конфигурации SSH в Ubuntu

    1. Здесь вы можете изменять используемый порт, что всегда лучше сделать для обеспечения безопасности подключения, далее может быть отключен вход от имени суперпользователя (PermitRootLogin) и включена активация по ключу (PubkeyAuthentication). По завершении редактирования следует нажать на клавишу : (Shift + ; на латинской раскладке) и добавить букву w, чтобы сохранить изменения.

Сохранение изменений в конфигурации Ubuntu

    1. Выход из файла осуществляется таким же образом, только вместо w используется q.

Выход из файла конфигурации в Ubuntu

    1. Не забудьте перезапустить сервер, введя sudo systemctl restart ssh.

Перезапустить SSH-сервер после изменений в Ubuntu

    1. После изменения активного порта его нужно зафиксировать в клиенте. Делается это путем указания ssh -p 2100 localhost, где 2100 — номер замененного порта.

Изменить стандартный порт SSH в Ub

    1. Если у вас настроен брандмауэр, там также требуется провести замену: sudo ufw allow 2100.

Изменить порт в брандмаузере Ubuntu

    1. Вы получите уведомление, что все правила были обновлены.

Информация об обновлении пакетов в Ubuntu

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

Шаг 4: Добавление ключей

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

    1. Откройте консоль и создайте новый ключ клиента, введя ssh-keygen -t dsa, а затем присвойте название файлу и укажите сам пароль для доступа.

Создание нового ключа в Ubuntu

    1. После этого будет сохранен публичный ключ и создастся секретное изображение. На экране вы увидите его вид.

Успешное создание нового ключа SSH в Ubuntu

    1. Осталось только скопировать созданный файл на второй компьютер, чтобы отключить подключение через пароль. Используйте команду ssh-copy-id username@remotehost, где username@remotehost — имя удаленного компьютера и его IP-адрес.

Переслать файл с ключом на компьютер в Ubuntu

Осталось только перезапустить сервер и проверить его корректность работы через открытый и секретный ключ.

На этом процедура установки SSH-сервера и его основная настройка завершена. Если вы вводите все команды правильно, никаких ошибок при выполнении задачи возникнуть не должно. В случае каких-либо проблем с подключением после настройки попробуйте убрать SSH из автозагрузки, чтобы решить неполадку (читайте об этом в Шаге 2).

Настройка SSH

Если необходимо добавить вход в SSH сразу по root:

  • Как настроить вход по Root в SSH

Смена порта SSH

Так как по умолчанию работа ssh настроена на порт 22, то пользоваться сервером становится не безопасно. Поэтому стоит сменить порт!

С помощью nano отредактируйте документ sshd_config, введите команду:

sudo nano /etc/ssh/sshd_config

раскомментируйте и поменяйте значения Port на необходимый:

# What ports, IPs and protocols we listen for Port 22

Строка Port

Утилита работает согласно стандартным установкам на основе порта 22. Это поведение не является безопасным, так как мошенникам известен этот порт. Они могут организовать атаку Bruteforce, чтобы перебить имеющийся пароль. Требуемый порт задается с помощью строки «Port 22». Потребуется в обязательном порядке изменить показатели порта на необходимые вам данные.

Строка – Protocol 2,1

На сервере команда ssh согласно стандартным установкам используются две версии протоколов. Они предназначены для совмещения. К примеру, если потребуется использование только второго протокола, потребуется раскомментировать (удалить #) строку «Protocol 2,1» и убрать цифру 1.

Запрет входа root через ssh

В команде ssh согласно стандартным установкам разрешается Root-доступ. Данное поведение также небезопасно. Именно поэтому пользователю потребуется обязательно раскомментировать строку:

PermitRootLogin no

Если в конфиге нет строчки PermitRootLogin no, необходимо довать ее в конец файла.

Вход только одному пользователю

В файле конфигурации sshd_config можно добавить две директивы:

  1. Allowusers;
  2. AllowGroups.

Они позволяют разрешить пользоваться ssh только конкретным пользователям или группам.

AllowUsers имя пользователя1, имя пользователя2

AllowGroups группа1, группа2

Особенности выполнения приложений Х11

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

X11Forwarding yes

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

service sshd restart

Или можно перезагрузить всю машину:

reboot

Протокол SSH

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

Protocol 2

И приведите ее к такому виду:

Protocol 2

Рут доступ

По умолчанию Root доступ по ssh разрешен, но такое поведение очень небезопасно, поэтому раскомментируйте строчку:

PermitRootLogin no

Доступ только определенного пользователя к SSH

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

AllowUsers User1, User2, User3
AllowGroups Group1, Group2, Group3

Здесь User1 и Group1 – пользователь и группа к которым нужно разрешить доступ.

Выполнение X11 приложений

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

X11Forwarding yes

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

service sshd restart

Использование SSH

Основная цель этой статьи – показать интересные и полезные способы использования ssh, о которых, возможно, вы не знали. Переходим к самому вкусному – возможности ssh.

Подключение к серверу через SSH

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

Естественно, перед началом надо арендовать виртуальный хостинг или VDS у одного из доступных провайдеров. У Timeweb, к примеру.

Если у вас macOS или Linux

  • Запускаем программу Terminal.
  • Вводим в консоль команду со следующим синтаксисом ssh имя пользователя@адрес сервера. В моем случае это ssh root@89.223.127.80.
  • Указываем пароль суперпользователя (его отправляет хостинг-провайдер сразу после регистрации).Команда SSH для подключения к серверу
  • Жмем Enter.

Все. Соединение установлено, можно переходить к работе непосредственно с сервером.

Если у вас Windows

  • Скачиваем и устанавливаем программу PuTTY.
  • В строку IP-адрес вводим адрес своего VDS или виртуального хостинга.
  • Жмем на кнопку Open.
  • Вводим пароль администратора, чтобы получить доступ к управлению.

Команды для PuTTY

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

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

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

history — показывает ранее использованные приложения и инструменты. Без дополнительных аргументов отображает 10 элементов. Но их количество можно изменить вручную, добавив к слову history любое число. history 13, к примеру.

Недавно введенные команды в Linux

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

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

Дополнительные символы

Не совсем команды, но тоже текстовые элементы, причем полезные.

<strong>; — разделитель, необходимый, чтобы активировать сразу несколько команд подряд. Это выглядит так: cd ~/Documents; mkdir Novaya_papka; rmdir Staraya-papka. Команды будут выполняться друг за другом независимо от результата выполнения каждой из них.

&& — то же самое, что и<strong> ;, но с важным нюансом. Команды, соединенные с помощью &&, будут выполняться друг за другом, только если предыдущая завершилась успешно. Синтаксис аналогичный:

sudo apt-get update && sudo apt-get install wget

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

~ — сокращение от /home/имя учетной записи/. Часто фигурирует в инструкциях.

Горячие клавиши

Парочка полезных сочетаний клавиш.

Стрелка вверх — показывает предыдущую команду.

Ctrl+C — прерывает запущенный процесс.

Ctrl+A — перемещает курсор в начало строки.

Ctrl+E — перемещает курсор в конец строки.

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

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

ssh user@host ls

Выполнит команду ls на удаленном сервере и вернет ее вывод в текущий терминал.

Выполнить локальный скрипт

Выполним интерпретатор bash на удаленном сервере и передадим ему наш локальный скрипт с помощью перенаправления ввода Bash:

ssh user@host ‘bash -s’ < script.sh

Использование программы ssh-agent

Как было сказано выше, в целях безопасности, приватный ключ, всегда должен быть защищен секретной фразой ( паролем ), но это вызывает некоторые неудобства, вам придется вводить секретную фразу, каждый раз когда вы подключаетесь к удаленному серверу по ключу, было-бы гораздо проще ввести пароль на ключ один раз и пользоваться им сколько потребуется. На этот случай в пакете OpenSSH, существуют специальные программы ssh-agent и ssh-add, в общем-то вторая является дополнением первой. Как это работает. Поле запуска программы ssh-agent, в нее добавляются расшифрованные ключи, то есть при добавлении она запросит секретную фразу ключа, для его дешифровки, и далее ssh-agent, будет выдавать уже расшифрованные ключи по запросу, например программе SSH. Запускать ssh-agent, можно двумя способами, со специальной опцией, говорящей, какой тип оболочки используется, или с помощью команды eval. Принципиальной разницы как его запускать, нет, просто в случае с опцией, вы должны точно знать, какую оболочку вы используете. ssh-agent -cЕсли в качестве оболочки используется С – Shell ssh-agent -s Если в качестве оболочки используется Bourne Shell eval `ssh-agent`В таком варианте запущенный ssh-agent, будет передан команде eval, которая выполнит его в текущей оболочке. Обратите внимание, используются обратные кавычки а не обычные ! Итак, запускаем ssh-agent: vds-admin /root/.ssh# eval `ssh-agent` Agent pid 1982 При запуске, ssh-agent создает переменные окружения, проверим какие: vds-admin /root/.ssh# env | grep SSH_A SSH_AUTH_SOCK=/tmp/ssh-7EeitdI5mr/agent.1981 В этой переменной хранится сокет, через который программа ssh, будет связываться с ssh-agent. SSH_AGENT_PID=1982 Это PID процесса ssh-agent Теперь нужно поместить в него расшифрованные ключи, делается это с помощью программы ssh-add. Если запустить ее без аргументов, будут добавлены все ключи, найденные в стандартных местах их обитания, то есть будут просканированы следующие файлы, ~/.ssh/identify, ~/.ssh/id_rsa и /.ssh/id_dsa. Если ключ защищен парольной фразой, программа попросит ввести ее, что-бы расшифровать ключ и загрузить уже готовый к применению. vds-admin /root/.ssh# ssh-add Enter passphrase for /root/.ssh/id_rsa: Запрос пароля на расшифровку Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa) Теперь пробуем подключиться к удаленному SSH серверу: vds-admin /root/.ssh# ssh 192.168.50.50 Last login: Tue Jul 7 18:45:27 2009 from .host. Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 7.1-STABLE (SMP_KERNEL) #1: Tue Mar 10 18:14:59 UTC 2009 Welcome to FreeBSD! Как видите пароль у нас больше никто не спрашивает, программа SSH, получает уже расшифрованный ключ от ssh-agent и мы успешно подключаемся к удаленному SSH серверу. Посмотреть отпечатки загруженных в ssh-agent ключей, можно той-же командой ssh-add с опцией -l, или целиком ключи, опцией -L. vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA) vds-admin /root/.ssh# ssh-add -L ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEArL0hIMmhw8rXeg0p72+EJXnC4iAY2XTkPAdTb3LnQb9bc0E5wvd cwCdNEtLlDIDCH+z0I1FaP3TfpvgVkv59X15TaNIeoB7uydqXvlLMOxpOJkfbc3eiA6a07PvZHMKXcIA0ZZ9+j12u l+HsGOK2qMQ5g52mOc6BOF1PVuoHfTR1C9nExv5UCA6h7e/v2wxq79pMW07nx7nshB5/1n5Gnyx+toQEzRiFbf zOJBB1ry/9NUF1DiBwOhKJVdEJBTUi0hyh/e77UAmVtkguEtjrsDEdxJ31sV21SL97EZHymMjRPjwU2nWjRkHf0Pi7 dlXBoCKRj3dQps38kwFd3m9Tu4+hXSnsF8FdxkX5y9XmN8Uz8UWR6O2zslr7xZubkDR3aCq1dtcbu2nkvC4+Vy TOxEdnaNqDlC6U6G6aUVKFc0Rb5dcPnqpKqUHWE8MlXq/obKMRjuSz+GOr1VgRe/wZM7/0GoO1Xrv2MDMhS+ S1uR+XkHkQr/EjTSxPiDZ92snZhtiyPIzTUZDOmclWHbe4gyvxDtU3Lxqzl3t1+Murg4sN1NrkZIHefMq2xeCOS8P bI89b3zJG2PJ3i2PSsOMviqIBOL3BBskGSWksJKi/YvvKwrlKaSM10wMZTbXHomgu+6jRd7cZtUOmU/FO0IoKejB MwuYbcPC+TCWBks0phU= /root/.ssh/id_rsa Загружен один ключ, по которому мы подключались к удаленной машине. Кроме этого, при запуске ssh-add, можно указать путь до конкретного ключа, который необходимо загрузить, например: vds-admin /root/.ssh# ssh-add /root/.ssh/id_rsa.new1 Enter passphrase for /root/.ssh/id_rsa.new1: Identity added: /root/.ssh/id_rsa.new1 (/root/.ssh/id_rsa.new1) Проверяем, что у нас теперь в ssh-agent: vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 /root/.ssh/id_rsa.new1 (RSA) Загружено уже 2 ключа Удаляются ключи из ssh-agent, так-же просто как и добавляются, для этого используется опция -d, без параметров, для удаления стандартных ключей, опция -dфайл_ключа, если нужно удалить конкретный ключ, или опция -D, для удаления всех ключей, например: vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA) 2048 c7:9f:b1:3b:c1:d0:61:15:38:27:d1:36:a7:49:55:cd id_rsa.new2 (RSA) vds-admin /root/.ssh# ssh-add -d id_rsa.new2 Identity removed: id_rsa.new2 (id_rsa.new2.pub) vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA) vds-admin /root/.ssh# ssh-add -D All identities removed. vds-admin /root/.ssh# ssh-add -l The agent has no identities. Приведу список самых используемых опций программы ssh-add: ssh-addБез опций, добавляются стандартные ключиssh-add имя файлаДобавляются конкретный ключ-lПоказывает отпечатки всех загруженных в данный момент ключей-LПосмотреть список самих ключей-DИз ssh-agent, будут удалены все ключи-d имя файлаУдаляет конкретный ключ-tУстановить время жизни ключей, через данный промежуток времени ключи будут выгружены.-xЗаблокировать ssh-agent паролем-XРазблокировать ssh-agent Что-бы закрыть ssh-agent, можно вызвать его c опцией -k, ну или на крайний случай прибить сигналом, например kill -QUIT PID, но это крайняя мера и при корректном запуске, это не потребуется: vds-admin /root/.ssh# ssh-agent -k unsetenv SSH_AUTH_SOCK; unsetenv SSH_AGENT_PID; echo Agent pid 1982 killed; Как видите произошел обратный процесс, переменные очищены, процесс убит.

Форвардинг ssh-agent

Форвардинг агента включается в файле конфигурации клиента SSH, директивой ForwardAgent yes. Как это работает. Вы запускаете ssh-agent на локальной машине, загружаете ключи, подключаетесь к удаленному SSH серверу, сервер создает обратное перенаправление через созданный SSH туннель к вашему ssh-agent и вы можете использовать загруженные в него ключи для последующих соединений. Для примера, с локального хоста, Local_host, подключаемся к удаленной машине Remote_host, по каким-то причинам, нам понадобилось что-то посмотреть на еще одном хосте, Next_remote_host, что происходит в таком случае:

  • Клиент ssh c Local_host, подключается к SSH серверу, Remote_host, и запрашивает форвардинг для ssh-agent
  • Сервер SSH, /usr/sbin/sshd, хоста Remote_host, создает сокет в /tmp/ssh-XXXXXXX/agent.##### и устанавливает переменную окружения SSH_AUTH_SOCK, присваивая ей путь к сокету.
  • Когда нам понадобится подключиться к следующему серверу, ( мы сейчас на сервере Remote_host ), SSH клиент хоста Remote_host, обращается по пути, лежащему в переменной SSH_AUTH_SOCK, то есть к сокету.
  • SSH сервер, находящийся на другом конце сокета /tmp/ssh-XXXXXXX/agent.#####, передает данные из ssh, сервера Remote_host, на ssh-agent, запущенный на хосте Local_host. Вся работа с ключами происходит на машине Local_host а не на машинах, на которых вы регистрируетесь в процессе работы.
  • Теперь с хоста Remote_host, вы можете подключиться к хосту Next_remote_host, используя ключи, загруженные в ssh-agent, на хосте Local_host.

Это только на первый взгляд сложно выглядит, вся эта схема работает абсолютно прозрачно для пользователя, от него требуется только соответствующим образом настроить /etc/ssh/ssh_config а дплее все просто. Собственно тут даже показывать нечего в качестве примера.

Бекап на удаленный сервер и восстановление

Мы можем сохранять бекэп диска сразу на удаленном сервере с помощью ssh. Перенаправим вывод dd с помощью оператора перенаправления |, затем сохраним его на той стороне в файл:

sudo dd if=/dev/sda | ssh user@host ‘dd of=sda.img’

Теперь чтобы восстановить состояние диска из сделанной копии выполните:

ssh user@host ‘dd if=sda.img’ | dd of=/dev/sda

Здесь и выше /dev/sda имя файла вашего жесткого диска.

Аутентификация без пароля

Использование ssh пароля для входа на сервер не только неудобно но и небезопасно, потому что этот пароль в любой момент может быть подобран. Самый надежный и часто используемый способ аутентификации – с помощью пары ключей RSA. Секретный ключ хранится на компьютере, а публичный используется на сервере для удостоверения пользователя.

Настроить такое поведение очень легко. Сначала создайте ключ командой:

ssh-keygen -t rsa

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

Затем отправляем ключ на сервер:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

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

Взять пароль из локального файла

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

ssh user@host < local_file.txt

Изменить приветствие SSH

При входе по ssh может выводиться приветствие, изменить его очень легко. За это отвечает файл /etc/issue. Просто откройте этот файл и введите нужный текст:

vi /etc/issue

Welcome!

Запуск нескольких команд через SSH

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

Запустить несколько команд на удаленном хосте по SSH:

ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР ‘КОМАНДА1; КОМАНДА2; КОМАНДА3’

можно и так:

ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР << EOF
КОМАНДА1
КОМАНДА2
КОМАНДА3
EOF

Смотрим неудачные попытки входа SSH

Хотите посмотреть были ли попытки неудачного доступа по ssh к вашему серверу и с каких IP адресов? Запросто, все запросы логируются в файл /var/log/secure, отфильтруем только нужные данные командой:

cat /var/log/secure | grep “Failed password for”

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

Кроме выполнения команд, можно копировать файлы по ssh. Для этого используется утилита scp. Просто укажите файл, который нужно передать, удаленный сервер и папку на сервере, вот:

$ scp /адрес/локального/файлапользователь@хост:адерс/папки

Например:

scp ~/test.txt user@host:documents

Кроме утилиты scp, передача файлов ssh может быть выполнена более хитрым способом. Прочитаем файл и с помощью cat, передадим, а там сохраним поток в файл:

cat localfile | ssh user@host “cat > remotefile”

Или так:

ssh user@host “cat > remotefile” < localfile

Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать:

tar czf – /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/

Такое копирование файлов ssh позволяет отправлять сразу целые папки.

Запуск графических приложений по ssh

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

Затем просто выполняем команду запуска графического приложения на удаленном сервере вот таким образом:

ssh -XC user@remotehost “eclipse”

Как вы уже видели опция X разрешает перенаправление X11 на стороне клиента, а С – сжатие данных.

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

Если вы использовали SSH с нестабильным интернетом, когда соединение время от времени рвется, то вам уже, наверное, надоело закрывать терминал, потому что иначе, на первый взгляд, сеанс никак не прекратить. Когда соединение с удаленным сервером разорвано вы не можете ввести никакую команду и сочетания клавиш Ctrl+C, Ctrl+Z, Ctrl+D не работают. И не будут работать поскольку клиент пытается отправить эти команды на сервер. Но есть решение – Escape последовательности. Чтобы активировать их поддержку добавьте строку:

EscapeChar ~

В файл /etc/ssh/ssh_config. Теперь, чтобы разорвать SSH соединение достаточно нажать Enter и набрать:

~.

Другие управляющие символы можно узнать нажав:

~?

Загрузка и скачивание файлов по SSH

Обычно SSH используется для выполнения команд на сервере. Но часто возникает необходимость защищенной передачи файлов на сервер и обратно. Для этого есть следующие варианты: команды scp и rsync или FTP-клиент с поддержкой SFTP.

scp

Название команды scp расшифровывается
как Secure Copy («защищенное/безопасное
копирование»).

Ниже вы видите пример, как при помощи
этой команды можно скопировать файл
secrets.json с удаленного сервера в вашу
локальную среду разработки:

$ scp имя_пользователя@example.com:~/src/myproject/myproject/settings/secrets.json ./myproject/settings/secrets.json

А в этом примере мы делаем то же самое,
но с пользовательскими настройками в
файле ~/.ssh/config:

$ scp examplecom:~/src/myproject/myproject/settings/secrets.json ./myproject/settings/secrets.json

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

$ scp ./myproject/settings/secrets.json examplecom:~/src/myproject/myproject/settings/secrets.json

rsync

Для синхронизации директорий на
компьютере и сервере можно использовать
команду rsync. Вот пример для директории
media/ (обратите внимание, что слэш в конце
важен):

$ rsync –archive –compress –partial –progress имя_пользователя@example.com:~/src/myproject/myproject/media/ ./myproject/media/

Вот тот же пример, но с пользовательскими
настройками в файле ~/.ssh/config:

$ rsync –archive –compress –partial –progress examplecom:~/src/myproject/myproject/media/ ./myproject/media/

Чтобы «отзеркалить» директорию media/
на удаленный сервер, нужно, опять же,
поменять местами источник и цель:

$ rsync –archive –compress –partial –progress ./myproject/media/ examplecom:~/src/myproject/myproject/media/

sftp

FTP-клиенты вроде Transmit дают вам возможность
устанавливать SFTP-соединения или при
помощи имени и пароля, или при помощи
имени и закрытого ключа. Вы даже можете
сгенерировать пару ключей прямо в
приложении.

SFTP работает так же, как FTP, но здесь
соединение шифруется.

Туннели SSH

С помощью SSH туннелей вы можете пробросить порт с удалённого сервера на локальную машину. Это очень полезно, в первую очередь, для разработчиков. Для того чтобы пробросить порт с удалённой машины локальной используйте опцию -L и такой синтаксис:

$ ssh-Lлокальный_порт:удаленный_адрес:удаленный_портпользователь@сервер

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

$ ssh -N -L 5555:127.0.0.1:3306 root@losst-1

Опция -N сообщает, что команду на удалённой машине выполнять не нужно. Локальный порт – 5555, поскольку сервер баз данных слушает на локальном интерфейсе удалённой машины, то и здесь надо указывать адрес 127.0.0.1. А порт MySQL по умолчанию 3306. Если же вы хотите чтобы локальный сервис был доступен на удалённой машине, то следует использовать опцию -R:

$ ssh -N -R 5555:127.0.0.1:3306 root@losst-1

Теперь локальная база данных на порту 3306 будет доступна на удалённом сервере при обращении к порту 5555.

Справочник команд Putty / SSH / Unix / Linux

Чтобы получить доступ к серверу по протоколу SSH (войти в консоль сервера) из Windows требуется установить на свой компьютер специальную программу (SSH client), например putty. Программа распростаняется бесплатно, вы можете скачать программу по ссылке скачать putty

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

Файловые команды

ls – список файлов и каталогов

ls -al – форматированный список со скрытыми каталогами и файлами

cd dir – сменить директорию на dir

cd – сменить на домашний каталог

pwd – показать текущий каталог

mkdir dir – создать каталог dir

rm file – удалить file

rm -r dir – удалить каталог dir

rm -f file – удалить форсированно file

rm -rf dir – удалить форсированно каталог dir *

cp file1 file2 – скопировать file1 в file2

cp -r dir1 dir2 – скопировать dir1 в dir2; создаст каталог dir2, если он не существует

mv file1 file2 – переименовать или переместить file1 в file2. если file2 существующий каталог – переместить file1 в каталог file2

ln -s file lin – создать символическую ссылку link к файлу file

touch file – создать file

cat > file – направить стандартный ввод в file

more file – вывести содержимое file

head file – вывести первые 10 строк file

tail file – вывести последние 10 строк file

tail -f file – вывести содержимое file по мере роста, начинает с последних 10 строк

Управление процессами

ps ax – вывести ваши текущие активные процессы

top – показать все запущенные процессы

kill pid – убить процесс с id pid

killall proc – убить все процессы с именем proc *

bg – список остановленных и фоновых задач; продолжить выполнение остановленной задачи в фоне

fg – выносит на передний план последние задачи

fg n – вынести задачу n на передний план

Права доступа на файлы

chmod octal file – сменить права file на octal, раздельно для пользователя, группы и для всех добавлением:

  • 4 – чтение (r)
  • 2 – запись (w)
  • 1– исполнение (x)

Примеры:

chmod 0777 – чтение, запись, исполнение для всех

chmod 0755 – rwx для владельца, rx для группы и остальных.

Дополнительные опции: man chmod.

SSH

ssh user@host – подключится к host как user

ssh -p port user@host – подключится к host на порт port как user

ssh-copy-id user@host – добавить ваш ключ на host для user чтобы включить логин без пароля и по ключам

Как ограничить подключение по паролю

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

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

Для начала зайдем на сервер по ключу:

ssh [email protected] -i ~/.ssh/server-key

Используя консольный текстовый редактор nano, откроем под root файл настроек OpenSSH:

nano /etc/ssh/sshd_config [email protected]:~# nano /etc/ssh/sshd_config

После чего мы увидим содержимое файла настроек. Нам нужно найти строчку:

… #PasswordAuthentication yes …

Убрать # в начале и заменить yes на no. То есть ее надо преобразить вот в такой вид:

… PasswordAuthentication no …

Далее нажимаем сначала Ctrl + O , затем Enter, чтобы сохранить. И Ctrl + X, чтобы выйти.

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

systemctl restart sshd

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

[email protected]:~# systemctl restart sshd [email protected]:~# exit logout Connection to 80.90.255.255 closed. [email protected]:~$

И попробуем обратно подключиться к северу по паролю.

[email protected]:~$ ssh [email protected] Permission denied (publickey).

И видим, что сервер нас больше таким способом пускать не намерен. А теперь попробуем с помощью ключа.

[email protected]:~$ ssh [email protected] -i ~/.ssh/server-key Enter passphrase for key ‘/home/uxumax/.ssh/server-key’: Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. [email protected]:~#

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

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

Сменить порт

Port 9724

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

Запретить связь по старому протоколу

Здесь мы определяем, что связь возможна только по протоколу v2

Запретить авторизацию под root

По умолчанию no. Если yes, можно авторизовываться под рутом. Под root работать небезопасно, лучше создать своего пользователя и работать под ним.

Если вы авторизованы не под root, перед всеми консольными командами нужно добавлять sudo — расшифровывается как Substitute User and DO — подмени юзера и делай (под ним). Например, позволяет исполнять команды от имени суперпользователя root.

Уменьшить число попыток авторизации

MaxAuthTries 2

Количество попыток ввода пароля. По умолчанию 6. При неудачном переборе сеанс связи обрывается.

Уменьшить время ожидания авторизации

LoginGraceTime 30s

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

Закрыть доступ по IP

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

Если доступ нужен только вам, самым простым и надёжным будет закрыть доступ отовсюду, кроме вашего IP или, если он динамический, то диапазона IP.

  1. Открываем /etc/hosts.allow и добавляем туда SSHD: 192.168.1.1где 192.168.1.1 — ваш IP. Если у вас динамический IP, определите IP с маской подсети и запишите Вашу подсеть вместо IP, например:

    SSHD: 192.168.0.0/16

  2. Открываем /etc/hosts.deny и добавляем туда: SSHD: ALL

Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.

Ещё один способ ограничения доступа по IP

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

AllowUsers = *@1.2.3.4

Здесь мы разрешаем доступ только для IP 1.2.3.4

Лучшие клиенты SSH для Windows

Большой недостаток в Windows – отсутствие совместимой с Linux оболочки. Есть несколько главных клиентов SSH, которые заполняют этот пробел. Чтобы перейти к делу: PuTTY – это самый распространенный бесплатный SSH-клиент для Windows. Мой личный фаворит – MobaXterm, который бесплатен для личного использования с 10 хостами. Читайте дальше, чтобы узнать больше о других бесплатных клиентских опциях Windows SSH.

1. PuTTY (бесплатно; с открытым исходным кодом)

Прежде чем мы поговорим об альтернативах PuTTY, позвольте мне сначала поговорить о PuTTY, который предлагает отличную бесплатную оболочку SSH / Telnet для Windows. Кто-то, вероятно, скажет, что PuTTY – лучший SSH-клиент. Я показал вам, как установить PuTTY на Windows. Подключиться к удаленному SSH-серверу так же просто, как просто набрать IP-адрес или домен и порт и нажать «Открыть».

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

SSH-доступ с PuTTY для Windows

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

2. SuperPutty (бесплатно; с открытым исходным кодом; на основе PuTTY)

SuperPutty – это альтернатива Windows PuTTY, целью которой является создание лучшей версии PuTTY. Однако для запуска требуется PuTTY. Другими словами, SuperPuTTY делает существующую установку PuTTY лучше. Это позволяет сеансам с вкладками, а также передачу файлов SCP между удаленной и локальной системой.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

SuperPuTTY требует PuTTY для запуска

Особенности SuperPuTTY включают в себя:

  • Пользовательский интерфейс стыковки позволяет персонализировать рабочее пространство и легко управлять несколькими сеансами PuTTY
  • Экспорт / Импорт конфигурации сеанса
  • Безопасная загрузка файлов с использованием протоколов scp или sftp
  • Макеты позволяют настраивать виды сеансов
  • Поддерживает конфигурации сеансов PuTTY, включая приватные ключи
  • Поддерживает протоколы SSH, RLogin, Telnet и RAW
  • Поддерживает локальную оболочку через MinTTY или puttycyg
  • Поддерживает Китти

3. PuTTY Tray (бесплатно; с открытым исходным кодом; на основе PuTTY)

PuTTY Tray, как следует из названия, основан на PuTTY. Он добавляет косметические изменения и расширяет PuTTY, используя дополнения, которые делают его лучше, чем PuTTY. Но во многих отношениях это очень похоже на PuTTY. Некоторые из его особенностей включают в себя:

  • Минимизация в системный трей (по CTRL + минимизация, всегда или непосредственно при запуске)
  • Иконки настраиваемые
  • Мигает значок в трее при получении сигнала звонка
  • Настраиваемая прозрачность окна
  • Гиперссылка на URL
  • Портативность: опционально сохраняет конфигурацию сеанса в файлах (например: на USB-накопителе), например, portaPuTTY
  • Легкий доступ к настройке «всегда сверху» (в системном меню)
  • Поддержка Android adb

Если вы большой поклонник PuTTY, то PuTTY Tray – отличная альтернатива PuTTY SSH.

4. KiTTY (бесплатно; с открытым исходным кодом; на основе PuTTY)

KiTTY – это форк PuTTY, предназначенный для работы в качестве SSH-клиента Windows. KiTTY имеет все функции от PuTTY и добавляет много других функций.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

KiTTY очень похож на PuTTY

Хотя весь список функций можно найти на веб-сайте KiTTY, некоторые ключевые добавленные функции перечислены ниже:

  • Фильтр сессий
  • портативность
  • Ярлыки для предопределенной команды
  • Автоматический пароль
  • Запуск локально сохраненного скрипта в удаленном сеансе
  • Значок для каждой сессии
  • Отправить в трей
  • Быстрый старт повторяющегося сеанса
  • Интеграция pscp.exe и WinSCP

KiTTY – еще одна отличная альтернатива PuTTY.

5. MobaXterm (бесплатно; доступна платная версия Pro)

MobaXterm – это отдельное приложение для Windows, которое предоставляет множество функций для программистов, веб-мастеров, ИТ-администраторов и любого, кто хочет управлять системой удаленно.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

MobaXterm Home – лучший SSH-клиент для Windows

Некоторые из его особенностей включают в себя:

  • Поддержка нескольких протоколов (SSH, X11, RDP, VNC, FTP, MOSH, …)
  • Приносит команды Unix в Windows (bash, ls, cat, sed, grep, awk, rsync, …)
  • Встроенный X-сервер и X11-Forwarding
  • Терминал с вкладками для SSH
  • GUI Файл / Текстовый редактор
  • Портативный и легкий

Это может быть расширено с помощью плагинов. Что мне нравится в MobaXterm, так это то, что никакие навязчивые объявления / запросы на обновление не отображаются даже в бесплатной домашней версии. Платная Профессиональная версия приносит больше возможностей.

6. SmarTTY (бесплатно)

SmarTTY также является одним из лучших SSH-клиентов для Windows. Это мой второй фаворит после MobaXterm и надежная замена PuTTY. И лучше всего, это бесплатно для использования.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

SmarTTY – бесплатный Windows SSH клиент

SmarTTY объединяет несколько потрясающих функций в одном приложении:

  • Один сеанс SSH – несколько вкладок
  • Передача файлов и целых каталогов
  • Редактировать файлы на месте
  • Встроенный шестигранный терминал для COM-портов
  • Готовая аутентификация с открытым ключом
  • Без проблем запускайте графические приложения со встроенным Xming

SmartTTY регулярно обновляется и выделяется среди таких программ, как PuTTY.

7. Клиент Dameware SSH (бесплатно; доступны платные опции)

Клиент Dameware SSH – это бесплатный эмулятор терминала Windows SSH, который позволяет подключаться к нескольким telnet и SSH с одной простой в использовании консоли.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

Dameware SSH Client для Windows

Функции клиента Dameware SSH включают в себя:

  • Управление несколькими сессиями с одной консоли с помощью интерфейса с вкладками
  • Сохраняйте любимые сессии в файловой системе Windows
  • Доступ к нескольким наборам сохраненных учетных данных для удобного входа на разные устройства
  • Подключение к компьютерам и устройствам с использованием протоколов telnet, SSH1 и SSH2

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

8. mRemoteNG (бесплатно; с открытым исходным кодом)

mRemoteNG, ответвление mRemote, представляет собой менеджер удаленных соединений с открытым исходным кодом, с вкладками, который объединяет несколько протоколов в одно приложение. Как и некоторые другие лучшие Windows SSH клиенты, перечисленные выше, он также поддерживает интерфейс с вкладками.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

mRemoteNG SSH Shell для Windows

mRemoteNG поддерживает следующие протоколы:

  • RDP (удаленный рабочий стол / сервер терминалов)
  • VNC (виртуальные сетевые вычисления)
  • ICA (Citrix Independent Computing Architecture)
  • SSH (Secure Shell)
  • Телнет (TELecommunication NETwork)
  • HTTP / HTTPS (протокол передачи гипертекста)
  • Rlogin
  • Raw Socket Connections

Это совершенно бесплатно и стоит попробовать, особенно если вы предпочитаете приложения с открытым исходным кодом.

9. Терминалы (бесплатно; с открытым исходным кодом)

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

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

Терминалы SSH Client

  • Интерфейс с несколькими вкладками
  • Открыть терминал на весь экран, переключаться между полноэкранным режимом
  • Избранные
  • Сетевые инструменты: инструменты Ping, Tracert, DNS, Wake on LAN, сканер портов, общие ресурсы и т.д.
  • История подключений
  • Снимок экрана
  • Откройте пользовательское приложение из окна Терминалов
  • Мульти-протокол: удаленный рабочий стол Windows (RDP), VNC, VMRC, SSH, Telnet и т.д.

Терминалы определенно имеют много инструментов и функций по сравнению с некоторыми другими программами-клиентами SSH, перечисленными выше. Полный список функций и скриншоты доступны на сайте терминала.

10. FireSSH Аддон

Если по какой-либо причине вы предпочитаете не использовать отдельное программное обеспечение для удаленного администрирования SSH, то дополнение FireSSH для Firefox и Chrome может стать отличной альтернативой. Отличным примером является ситуация, когда вы находитесь в системе, у которой нет прав администратора. Хотя портативные клиенты SSH могут работать на таких ПК с Windows, расширение FireSSH не зависит от платформы.

10 лучших SSH-клиентов для Windows: бесплатные альтернативы PuTTY

FireSSH для Firefox и Chrome

FireSSH – это расширение, написанное на Javascript и позволяющее вам подключаться к удаленному SSH-серверу через ваш браузер. Если ваш браузер позволяет просматривать вкладки, вы можете открывать сессии SSH в отдельных вкладках.

20 трюков с SSH: подборка советов и интересных команд на все случаи жизни

1. Запускай команды быстро

Чтобы выполнить всего одну удаленную команду, совсем не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:

$ ssh user@host df -h

А так — перезагрузить ее:

$ ssh user@host sudo reboot

2. Составляй списки команд и запускай их разом

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

$ ssh user@host “`cat file.txt`”

3. Редактируй удаленные файлы локальным редактором

Чтобы отредактировать файл на удаленной машине, не требуется заходить на нее и использовать консольный редактор. На самом деле файл можно открыть в твоем любимом текстовом редакторе на локальной машине (gvim заменяем на свой редактор):

$ gvim scp://user@host//путь/к/файлу

4. Копируй содержимое удаленного файла в буфер обмена

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

$ ssh user@host cat /путь/к/файлу | xclip

А так можно скопировать вывод команды:

$ ssh user@host uname -a | xclip

5. Сравнивай удаленный и локальный файл без копирования

Похожий прием можно использовать для сравнения двух файлов:

$ ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/локальному/файлу

6. Работай с удаленными файлами с помощью локального файлового менеджера

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

$ sudo apt-get install sshfs

Создать каталог для подключения «сетевого диска»:

$ mkdir remote_files

И подключить его:

$ sshfs user@host:/home/user ~/remote_files/

Теперь все файлы удаленного каталога /home/user будут видны в каталоге ~/remote_files/ и с ними можно работать, как с обычными.

7. Используй tmux

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

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

Tmux в режиме разделения экрана

8. Копируй ключи быстро

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

$ ssh-copy-id user@host

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

$ ssh-copy-id -i ~/my_key.pub user@hostКопируем ключ
Копируем ключ

9. Создай постоянное соединение с машиной

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

Добавь следующие строки в ~/.ssh/config:

Host host ControlPath ~/.ssh/master-%r@%h:%p ControlMaster no

А затем создай соединение:

$ ssh -MNf user@host

10. Используй специальную версию SSH для неустойчивых соединений

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

Решить проблему можно с помощью autossh. Это обертка над SSH, которая умеет проверять жизнеспособность канала. Autossh создает дополнительное SSH-соединение с сервером и непрерывно шлет по нему heartbeat-пакеты. Если пакет не доходит до адресата, autossh считает канал мертвым и перезапускает SSH-соединение.

Пользоваться очень просто:

$ sudo apt-get install autossh $ autossh -M5000 user@host

По умолчанию тайм-аут между посылкой heartbeat-пакетов составляет десять минут, что слишком много. Для уменьшения тайм-аута пропиши его в переменную AUTOSSH_POLL перед запуском autossh (значение в секундах):

$ export AUTOSSH_POLL=10

Есть вариант еще лучше: mosh. Это специально оптимизированная для неустойчивых и низкоскоростных соединений версия SSH, работающая по протоколу UDP. Mosh позволяет получить быстрое и отзывчивое соединение даже на очень медленном канале и из коробки умеет поднимать упавшее соединение и даже переключать клиента с одного IP на другой (при переключении с Wi-Fi-соединения на мобильное, например) без перезапуска сессии.

У mosh всего один недостаток: он требует установки не только на локальную машину, но и на удаленную. Зато после этого ничего настраивать не нужно, достаточно использовать команду mosh вместо ssh. Более того, mosh уже встроен в SSH-клиенты JuiceSSH для Android и Blink для iOS.

11. Открывай порт SSH, только когда он нужен

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

Если ты подключаешься к серверу нечасто, второй вариант практически идеален. Идея в том, что на сервер устанавливается специальный демон, который слушает указанные порты и в случае соединения с этими портами в определенном порядке откроет 22-й порт. Другой порядок соединения будет закрывать порт.

Техника называется port knoking и реализуется с помощью демона knockd. Установи демон на сервер:

$ sudo apt-get install knockd

И настрой его, добавив в файл /etc/knockd.conf следующие строки:

[options] logfile = /var/log/knockd.log [openSSH] sequence = 3000,4000,5000 seq_timeout = 5 command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 5000,4000,3000 seq_timeout = 5 command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT tcpflags = syn

Перезапусти демон:

$ sudo /etc/init.d/knockd restart

Теперь используй следующую команду для подключения к серверу:

$ knock 3000 4000 5000 && ssh user@host && knock 5000 4000 3000

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

Стучимся в порты
Стучимся в порты

12. Защитись от брутфорса

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

Красота fail2ban в том, что он не требует настройки и начинает работать сразу после установки. Все, что надо сделать, — это инсталлировать пакет:

$ sudo apt-get install fail2ban

13. Измерь скорость соединения

С помощью SSH легко измерить скорость соединения с машиной. Для этого можно использовать утилиту pv (pipe viewer). Она предназначена для измерения скорости передачи данных через пайпы (|). Объединив ее с SSH, можно получить достаточно точный бенчмарк скорости соединения:

$ yes | pv | ssh user@host “cat > /dev/null”Измеряем скорость соединения
Измеряем скорость соединения

14. Используй SSH как SOCKS-прокси

SSH очень легко превратить в SOCKS-прокси, который будет пересылать твои данные между локальной машиной и SSH-сервером через зашифрованный канал. Все, что для этого нужно сделать, — запустить SSH-клиент с флагом -D, после которого указать номер SOCKS-порта (флаг -C включает принудительное сжатие трафика):

$ ssh -D 9999 -C user@host

15. Обходи файрволы

В дополнение к SOCKS-прокси в SSH есть функция прозрачного «проброса портов». Работает она так: на локальной машине открывается порт. Трафик, переданный на этот порт, прозрачно проксируется через удаленную машину и направляется на указанный хост:порт. Для примера: допустим, твой начальник заблокировал доступ к xakep.ru на уровне корпоративного файрвола. Но ты можешь обойти это ограничение, используя удаленный SSH-сервер:

$ ssh -L8080:xakep.ru:80 user@host

Теперь все подключения к localhost:8080 будут перенаправляться на xakep.ru:80.

16. Сохрани настройки подключения к хостам

Если ты работаешь с большим количеством хостов под именем разных юзеров с использованием разных ключей, то ты существенно упростишь свою жизнь, если создашь для этих хостов шорткаты. Например, следующие строки ~/.ssh/config описывают два хоста:

  • example.com, SSH-сервер на котором «висит» на порту 2222, а в качестве ключа используется ~/my_key.pem;
  • 192.168.33.10, с SSH-сервером на стандартном порту, юзером root и принудительным отключением аутентификации с помощью ключа. Host server1 HostName example.com Port 2222 User user IdentityFile ~/my_key.pem Host server2 HostName 192.168.33.10 User root PubkeyAuthentication no

Теперь, чтобы подключиться к example.com, нет нужды набирать длинную команду

$ ssh -i ~/my_key.pem user@example.com -p 2222

Можно использовать шорткат:

$ ssh server1

17. Подключайся к удаленной машине через другую машину

Допустим, у тебя есть доступ к host1, но нет доступа к host2 (он за файрволом, например), но доступ к host2 есть у host1. Тогда подключиться к host2 с твоей машины можно так:

$ ssh -t user@host1 ssh user@host2

18. Копируй файлы с удаленной машины на другую машину через свою

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

$ ssh root@host1 “cd /копируемый/каталог/ && tar -cf – .” | ssh root@host2 “cd /куда/копировать/ && tar -xf -”

19. Запускай графический софт

Linux/BSD используют клиент-серверную оконную систему X Window System, изначально разработанную для запуска графических приложений на мейнфрейме с выводом картинки на экран тонкого клиента. Поэтому она из коробки позволяет запускать приложения на удаленной машине так, чтобы их вывод был перенаправлен на локальную. А SSH умеет форвардить протокол X, так что его можно использовать для запуска не только консольных, но графических приложений:

$ ssh -X user@host firefox

20. Слушай музыку с удаленной машины

Немного надуманный, но в целом довольно интересный трюк:

$ ssh user@host “cat /home/user/music/*.mp3” | mpg123 –

Своего рода интернет-радио для одного.

Выводы

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

[spoiler title=”Источники”]
  • https://sheensay.ru/ssh
  • https://omgubuntu.ru/chto-takoie-ssh-i-chiem-on-otlichaietsia-ot-ftp/
  • https://www.vseprolinux.ru/ssh-linux
  • https://losst.ru/kak-polzovatsya-ssh
  • https://www.REG.ru/support/hosting-i-servery/nachalo-raboty-i-dostupy/kak-podklyuchitsya-po-ssh
  • https://ITProffi.ru/ustanovka-i-nastrojka-servera-ssh-v-linux/
  • https://linuxinsider.ru/kak-podklyuchitsya-po-ssh-iz-linux/
  • https://androidp1.ru/kak-polzovatsja-ssh-a-takzhe-ustanovka-i-nastrojka/
  • https://lumpics.ru/installation-ssh-server-in-ubuntu/
  • https://timeweb.com/ru/community/articles/105-komand-dlya-raboty-s-linux-po-ssh
  • https://vds-admin.ru/ssh/ssh-autentifikatsiya-po-klyucham-ispolzovanie-programm-ssh-keygen-i-ssh-agent
  • https://obu4alka.ru/ssh-start-scripts-linux.html
  • https://techrocks.ru/2019/10/25/using-ssh-connections-cheat-sheet/
  • https://vps-server.ru/ssh-commands
  • https://mediadoma.com/10-luchshih-ssh-klientov-dlja-windows-besplatnye-alternativy-putty
  • https://xakep.ru/2016/12/16/ssh-tips-n-tricks/
[/spoiler]

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here