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

Обновлено: 21.11.2024

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

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

Пошаговый процесс:

  1. Выполнен вход на удаленный компьютер
  2. Выполнил команду
  3. Выход из удаленного компьютера

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

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

В качестве альтернативы можно выполнить команду через ssh на удаленном хосте следующим образом:

test
Как видите, я добавил команду df -h после информации для входа в ssh, команда была выполнена на удаленной машине, а вывод был напечатан в моей локальной оболочке. Это может показаться не таким уж большим делом, но лично я очень часто использую его, чтобы получить IP-адрес, назначенный моим DHCP-сервером машине, которая только что подключилась к сети, следующим образом:

В этом случае я знаю, что сервер DHCP регистрирует в /var/log/syslog все назначения IP. При удаленном выполнении команды tail /var/log/syslog на DHCP-сервере по адресу 172.31.0.1 я вижу, что последний назначенный IP-адрес был 172.31.0.21. Я также вижу MAC-адрес машины, которой был назначен этот IP-адрес: b8:27:eb:90:64:9b, и оттуда я могу определить машину, получившую этот IP-адрес.

Еще одно преимущество удаленного выполнения неинтерактивных команд с помощью ssh заключается в том, что вы можете включать их в сценарии, поскольку вывод можно анализировать так же, как вывод любой другой команды. Например, вот скрипт, который проверяет, заполнен ли корневой раздел удаленного хоста на 90%, и если да, то предлагает удалить 10 самых больших файлов в каталоге /var/log/:

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

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

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

В этом уроке вы узнаете:

  • Примеры удаленного выполнения команд через SSH

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

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

ПРИМЕЧАНИЕ
Вы можете сэкономить на шаге и не вводить пароль SSH при каждом подключении, если сначала будете следовать нашему руководству по входу через SSH без пароля.

  1. Для удаленного создания файла можно использовать следующую команду SSH.
  2. В этом примере создается локальная копия удаленного файла /etc/passwd в /tmp/passwd :
  3. В этом примере сценарий будет выполняться на удаленном сервере. Конечно, это будет работать только в том случае, если скрипт уже существует и имеет соответствующие разрешения на выполнение.
  4. В этом примере мы делаем локальную копию bzip2 файла /var/log/auth.log удаленного сервера в локальный файл в каталоге /tmp/:

Заключительные мысли

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

Связанные руководства по Linux:

Комментарии и обсуждения

НОВОСТНАЯ БЮЛЛЕТЕНЬ

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

НАПИСАТЬ НАМ

LinuxConfig ищет технических писателей, специализирующихся на технологиях GNU/Linux и FLOSS. В ваших статьях будут представлены различные руководства по настройке GNU/Linux и технологии FLOSS, используемые в сочетании с операционной системой GNU/Linux.

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

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

Предпосылки:

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

Включите службу SSH в Ubuntu, если она не была включена ранее.

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

Выполните следующую команду, чтобы открыть файл sshd_config с помощью редактора nano и добавить некоторые необходимые конфигурации.

Добавьте следующие строки в файл, чтобы включить вход root и аутентификацию на основе пароля.

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

Запуск различных типов команд SSH:

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

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

Выполните следующую команду, чтобы выполнить команду `ls` на удаленном хосте, используя имя хоста. Здесь «[email protected]» работал как клиентский компьютер, а «[email protected]» работал как сервер.

Следующий вывод показывает список всех файлов и папок текущего каталога удаленного хоста. Здесь имя пользователя удаленного хоста — «fahmida».

Выполните следующую команду, чтобы выполнить команду `pwd` на удаленном хосте, используя IP-адрес удаленного хоста. Здесь «[email protected]» работал как клиентский компьютер, а «[email protected]» работал как сервер.

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

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

Выполните следующую команду, чтобы выполнить три команды, `date,` `pwd` и `df`, используя одну команду SSH на удаленном хосте, используя имя хоста. Здесь «[email protected]» работал как клиентский компьютер, а «[email protected]» работал как сервер.

Следующий вывод показывает вывод трех команд после выполнения на удаленном хосте, где имя пользователя удаленного хоста — fahmida.

Запуск нескольких команд с конвейером:

Создайте текстовый файл с именем fruit.txt со следующим содержимым на удаленном хосте, используемом в следующей команде SSH.

фрукты.txt

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

Выполните следующую команду SSH с клиентского терминала, чтобы проверить, существует ли слово «манго» в файле fruit.txt.

Выполните следующую команду SSH с клиентского терминала, чтобы проверить, существует ли слово «Jackfruit» в файле fruit.txt.

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

Выполнить команду для выполнения скрипта:

В этой части руководства показано выполнение любого сценария bash на удаленном узле с помощью команды SSH. Создайте файл bash с именем read.sh со следующим сценарием на удаленном хосте. Сценарий примет входное значение от пользователя и распечатает введенное значение, объединив его с другой строкой после выполнения.

read.sh

read -p "Вам нравится манго?" и

echo "Вау! Вам нравится $answer ."

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

Следующий вывод появится, если файл существует на удаленном хосте.

Выполните следующую команду SSH, чтобы подключиться к удаленному хосту с помощью IP-адреса.

Выполните следующую команду, чтобы выполнить файл read.sh после входа на удаленный хост.

После выполнения вышеуказанных команд появится следующий вывод. Файл bash был выполнен здесь два раза с двумя разными значениями.

Запустите команду `sudo`:

В этой части руководства показано выполнение команды `sudo` после входа на удаленный хост с помощью команды SSH.

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

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

После выполнения указанных выше команд появится следующий вывод.

Закрыть SSH:

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

Вывод:

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

Об авторе

Фахмида Есмин

Я веду курсы веб-программирования. Мне нравится писать статьи или учебные пособия на различные темы в области ИТ. У меня есть канал на YouTube, на котором публикуются различные учебные пособия по Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel и т. д.: Справка Tutorials4u.

Мне нужно запустить локальный сценарий оболочки (Windows/Linux) на удаленной машине.

Я настроил SSH на обеих машинах A и B. Мой скрипт находится на машине A, который будет запускать часть моего кода на удаленной машине, машине B.

Локальные и удаленные компьютеры могут быть на базе Windows или Unix.

Есть ли способ запустить это с помощью plink/ssh?

Однако на вопрос о сбое сервера не так много ответов. Возможно, этот вопрос должен заменить тот.

20 ответов 20

Если компьютер A является Windows, вы можете использовать Plink (часть PuTTY) с параметром -m, и он выполнит локальный скрипт на удаленном сервере.

Если компьютер A является системой на основе Unix, вы можете использовать:

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

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

@Agostino, вы можете добавить такие параметры: ssh root@MachineB ARG1="arg1" ARG2="arg2" 'bash -s' Авторы полностью относятся к ответу @chubbsondubs ниже.

@YvesVanBroekhoven Это устарело, но суть -s в том, чтобы иметь возможность передавать аргументы сценарию, полученному через стандартный ввод: ssh root@MachineB 'bash -s arg1 arg2' . Если не указать -s, arg1 будет интерпретироваться как удаленный скрипт, который будет выполняться с arg2 в качестве первого аргумента. Нет необходимости использовать переменные среды.

Это старый вопрос, и ответ Джейсона работает нормально, но я хотел бы добавить следующее:

Это также можно использовать с su и командами, требующими ввода данных пользователем. (обратите внимание на экранированный документ)

Редактировать: поскольку этот ответ продолжает получать немного трафика, я бы добавил еще больше информации к этому замечательному использованию heredoc:

Вы можете вкладывать команды с помощью этого синтаксиса, и это единственный способ, которым вложение работает (разумным образом)

Вы действительно можете общаться с некоторыми службами, такими как telnet, ftp и т. д. Но помните, что heredoc просто отправляет стандартный ввод в виде текста, а не ждет ответа между строками

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

Читайте также: