Поиск по сайту:

Наиболее распространенное использование и настройка команд SSH в Linux


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

Secure Shell (SSH) – это широко распространенный сетевой протокол, который позволяет нам безопасно взаимодействовать с удаленными хостами. Он обеспечивает безопасность, шифруя весь обмен данными между ними.

Как использовать команду SSH в Linux

В этом разделе мы обсудим некоторые популярные варианты использования протокола SSH.

Подключиться к удаленному хосту Linux

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

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

Синтаксис команды SSH следующий:

ssh [OPTIONS]  [COMMANDS] [ARGS]

Здесь квадратные скобки ([]) представляют необязательные аргументы, тогда как угловые скобки (<>) представляют обязательные аргументы.

Подключимся к удаленному хосту с помощью клиента ssh:

ssh -l root 192.168.19.130

В этом примере мы указали имя для входа с помощью параметра -l, а пункт назначения — 192.168.19.130. Соединение SSH устанавливается после ввода правильного пароля. Теперь мы можем выполнять команды на удаленном хосте так же, как и в локальной системе.

hostname

Чтобы завершить сеанс, мы можем использовать команду exit или комбинацию клавиш ctrl+D.

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

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

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

Давайте выполним команду hostname на удаленном хосте:

ssh -l root 192.168.19.130 hostname

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

ssh -l root 192.168.19.130 'hostname; pwd'

Важно отметить, что команды должны быть заключены в кавычки и разделены точкой с запятой (;). Если вы хотите запускать команды на нескольких удаленных хостах Linux, прочитайте нашу статью — Pssh — запуск команд на нескольких удаленных хостах Linux.

Выполнить сценарий на удаленном хосте

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

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

cat script.sh 

hostname
pwd

Теперь давайте выполним это на удаленном хосте:

ssh [email  'bash -s' < ./script.sh 

В этом примере мы использовали опцию -s bash для чтения сценария со стандартного ввода.

Копирование файлов между хостами

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

Скопируем файл script.sh в каталог /tmp удаленного хоста:

scp script.sh [email :/tmp

Теперь убедитесь, что файл скопирован:

ssh [email  'ls /tmp/script.sh'

Аналогичным образом мы можем использовать команду scp для копирования каталогов. Однако нам нужно использовать опцию -r с командой.

Включить сжатие для SSH

SSH поддерживает сжатие данных с использованием алгоритма сжатия gzip, который сжимает все возможные потоки данных, такие как stdin, stdout, stderr и т. д. Эта опция очень удобна при использовании медленных сетевых подключений.

Мы можем включить сжатие по SSH, используя опцию -C:

ssh -C -l root 192.168.19.130 'hostname' 

Включить подробный режим для SSH

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

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

ssh -v -l root 192.168.19.130 hostname

В дополнение к этому мы можем повысить уровень детализации, используя несколько опций -v.

  • -v — устанавливает уровень детализации равным 1 и предоставляет подробную информацию о действиях на стороне клиента.
  • -vv — устанавливает уровень детализации равным 2 и предоставляет подробную информацию о действиях на стороне клиента и сервера.
  • -vvv — устанавливает уровень детализации равным 3 и предоставляет более подробную информацию о действиях на стороне клиента и сервера.

Максимальный уровень детализации, поддерживаемый SSH, равен 3. Давайте посмотрим на это в действии:

ssh -vvv -l root 192.168.19.130 hostname

В приведенном выше примере debug1 представляет сообщение отладки, включенное уровнем детализации 1. Аналогичным образом, debug2 и debug3 представляют сообщения отладки, включенные уровнем детализации. уровни детализации 2 и 3 соответственно.

Escape-последовательности в SSH

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

Приостановка сеанса SSH

Иногда нам приходится выполнить несколько действий на локальном компьютере, не завершая текущий сеанс SSH. В таком случае мы можем приостановить текущий сеанс, используя последовательность клавиш ~ + ctrl+z.

Сначала войдите на удаленный хост и выполните команду hostname:

ssh -l root 192.168.19.130
hostname

Затем, чтобы приостановить текущий сеанс, сначала введите символ тильды (~), а затем нажмите клавиши ctrl+z. Важно отметить, что символ тильды (~) не будет отображаться в стандартном выводе, пока мы не нажмем ctrl+z.

Теперь давайте проверим, что сеанс приостановлен:

jobs

Здесь мы видим, что текущий сеанс SSH работает в фоновом режиме.

Давайте снова возобновим сеанс с помощью команды fg и выполним команду hostname:

fg %1

Завершить замороженный сеанс SSH

Я уверен, что вы наверняка видели зависшие сеансы SSH, которые происходят, когда сеанс прерывается из-за нестабильной сети. Здесь мы не можем прервать сеанс с помощью команды exit. Однако мы можем завершить его, используя последовательность клавиш "~ + .".

Сначала войдите на удаленный хост:

ssh -l root 192.168.19.130

Теперь используйте комбинацию клавиш "~ + .", чтобы завершить текущий сеанс.

В этом примере мы видим, что SSH показывает сообщение: Соединение с 192.168.19.130 закрыто.

Список поддерживаемых escape-последовательностей

Одна интересная вещь заключается в том, что существует escape-последовательность, позволяющая перечислить все поддерживаемые escape-последовательности. Мы можем использовать “~ + ? ” escape-последовательность, чтобы просмотреть поддерживаемые escape-последовательности:

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

Как настроить SSH в Linux

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

Отображать SSH-баннер

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

Сначала создайте текстовый файл на удаленном сервере с предупреждающим сообщением:

vi /etc/banner.txt 

Затем добавьте следующее баннерное сообщение:

*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************

Далее откройте файл /etc/ssh/sshd_config и укажите файл с директивой Banner:

Banner /etc/banner.txt

Теперь перезапустите службу sshd и завершите сеанс с помощью команды exit:

systemctl restart sshd
exit

Наконец, проверьте баннер, войдя на удаленный хост:

ssh -l root 192.168.19.130

Здесь мы можем убедиться, что сервер правильно отображает баннер SSH.

Отключить root-вход по SSH

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

Мы можем использовать директиву PermitRootLogin, чтобы отключить вход пользователя root.

Сначала откройте файл /etc/ssh/sshd_config и используйте параметр no с директивой PermitRootLogin:

PermitRootLogin no

Теперь перезапустите службу sshd и завершите сеанс с помощью команды exit:

systemctl restart sshd
exit

Наконец, проверьте это, создав новый сеанс SSH:

ssh -l root 192.168.19.130

Здесь мы можем наблюдать, что мы не можем войти на удаленный хост с пользователем root. Чтобы разрешить вход пользователю root, мы можем использовать опцию yes с той же директивой.

Изменить порт SSH по умолчанию

По умолчанию SSH использует TCP-порт 22. Однако мы можем настроить SSH для работы на другом порту, например 8088.

Сначала откройте файл /etc/ssh/sshd_config и используйте значение 8088 с директивой Port:

Port 8088

Затем перезапустите службу sshd и завершите сеанс:

systemctl restart sshd
exit

Теперь давайте войдем на удаленный хост:

ssh -p 8088 -l root 192.168.19.130

В этом примере мы использовали опцию -p для указания номера порта.

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

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

Знаете ли вы о каком-либо другом лучшем использовании команд SSH в Linux? Поделитесь с нами своим мнением в комментариях ниже.