Журналы команды, выполняющейся на удаленной машине с использованием ssh

Вопрос или проблема

Я подключаюсь к удаленной машине по SSH и выполняю команду с использованием sudo. Я использую tt для соединения с TTY. Я хочу получить вывод (логи консоли) команды, которую я выполняю на своем локальном компьютере. Как я могу это сделать?

ssh -i keyfile -tt user_name@$web_ip "sudo p.sh"

ssh -i keyfile user_name@$web_ip "sudo p.sh" > p.sh.local.log

Я думаю, что это сделает то, что вам нужно, по крайней мере, если p.sh – это довольно простой скрипт (например, ls -al).
(Примечание: удалить -tt)

Для логов в реальном времени:

ssh -t -i keyfile user_name@$web_ip "yes" > yes.local.log

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

Ответ или решение

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

Основы работы с SSH и вывода команд

Команда, которую вы указали:

ssh -i keyfile -tt user_name@$web_ip "sudo p.sh"

использует следующие ключевые моменты:

  • -i keyfile: указывает файл ключа для аутентификации пользователя.
  • -tt: заставляет SSH эмулировать терминал TTY, что может быть необходимо для выполнения команд, требующих интерактивного ввода.
  • sudo p.sh: выполняет скрипт p.sh с правами суперпользователя на удаленной машине.

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

Перенаправление вывода на локальную машину

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

ssh -i keyfile user_name@$web_ip "sudo p.sh" > p.sh.local.log

Эта команда перенаправит стандартный вывод выполнения скрипта p.sh на локальный файл p.sh.local.log. При этом следует убедиться, что вы не используете -tt, так как это может привести к неправильной интерпретации перенаправления.

Получение логов в реальном времени

Если вам нужно следить за логами в реальном времени, можно использовать следующую конструкцию:

ssh -t -i keyfile user_name@$web_ip "yes" > yes.local.log

Команда yes будет генерировать множество вывода, и таким образом вы сможете наблюдать его в реальном времени, пока SSH-сессия активна. Тем не менее, будьте осторожны, так как это может создать большие файлы, если команда продолжает работать долго.

Дополнительные рекомендации

  1. Использование tee: Если вы хотите одновременно видеть вывод на экране и записывать его в файл, вы можете использовать команду tee. Например:

    ssh -i keyfile -tt user_name@$web_ip "sudo p.sh" | tee p.sh.local.log
  2. Журналирование ошибок: Если важно также захватывать сообщения об ошибках, используйте:

    ssh -i keyfile -tt user_name@$web_ip "sudo p.sh" > p.sh.local.log 2>&1
  3. Фоновая работа: Возможно, вы захотите выполнить SSH-вызов в фоновом режиме, используя & в конце команды:

    ssh -i keyfile user_name@$web_ip "sudo p.sh" > p.sh.local.log &

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...