Вопрос или проблема
Я подключаюсь к удаленной машине по 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-сессия активна. Тем не менее, будьте осторожны, так как это может создать большие файлы, если команда продолжает работать долго.
Дополнительные рекомендации
-
Использование
tee
: Если вы хотите одновременно видеть вывод на экране и записывать его в файл, вы можете использовать командуtee
. Например:ssh -i keyfile -tt user_name@$web_ip "sudo p.sh" | tee p.sh.local.log
-
Журналирование ошибок: Если важно также захватывать сообщения об ошибках, используйте:
ssh -i keyfile -tt user_name@$web_ip "sudo p.sh" > p.sh.local.log 2>&1
-
Фоновая работа: Возможно, вы захотите выполнить SSH-вызов в фоновом режиме, используя
&
в конце команды:ssh -i keyfile user_name@$web_ip "sudo p.sh" > p.sh.local.log &
Заключение
Запись вывода команд, выполняемых на удаленных машинах через SSH, — это полезная практика для администрирования и аудита. Используя предложенные методы, вы сможете эффективно обрабатывать и контролировать выполнение ваших скриптов на удаленных серверах. Не забывайте выполнять тесты на простых командах перед запуском более сложных скриптов, чтобы гарантировать корректную работу перенаправления и записи логов.