Как обойти параметр RemoteCommand в конфигурации ssh _

cron регистрирует свои действия с по syslogс уровнем детализации, зависящим от настроенного уровня журнала. Это не включает результаты работы.

Что касается последнего, на странице руководства говорится

When executing commands, any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab, if such exists).

Поскольку у вас нет настроенного MTA, выходные данные отбрасываются, как указано в ваших журналах.

Если вы хотите настроить MTA, пакеты MTA в Debian и его производных поставляются с хорошими сценариями установки, которые могут настроить простую настройку для вас; sudo apt install postfixи следуйте инструкциям.

В качестве альтернативы вы можете перенаправить вывод ваших заданий cron в системный журнал, используяlogger:направить вывод ваших заданий вlogger -p cron.info(для обычного вывода )иlogger -p cron.err(для ошибок ).

Причина, по которой cron предполагает отправлять выходные данные по электронной почте, заключается в том, что выходные данные заданий cron имеют степень детализации, которая не соответствует журналу системного журнала (, который не хранится для каждого пользователя ). Каждый пользователь системы может настраивать задания cron, но пользователи не обязательно имеют доступ к системным журналам, и они могут не захотеть, чтобы все другие пользователи, имеющие доступ к этим журналам, видели выходные данные своих заданий. Когда cron был разработан, электронная почта была разумным способом доставить результат задания cron пользователю, который им управлял, :ожидалось, что системы Unix имеют работающую настройку электронной почты. В настоящее время это менее очевидно не потому, что изменилась пригодность электронной почты, а потому, что изменилась ее доступность. В системах с работающей электронной почтой по-прежнему имеет смысл использовать ее для вывода cron; в качестве альтернативы, задания могут выводиться в -файлы журналов пользователей (с определенными перенаправлениями в каждом задании ).

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

2
11.01.2021, 12:52
2 ответа

Не указывайте RemoteCommandв файле конфигурации. Наличие RemoteCommandиногда полезно для определения псевдонима для хоста, чтобы ssh myaliasзапускал определенную команду. Это бесполезно в записи общего назначения -. Как вы заметили,он не позволяет делать что-либо, кроме запуска этой конкретной команды :, вы не можете использовать rsync, sftp, sshfs или даже запускать ssh myhost specific-commandв интерактивном режиме.

Если вы хотите по умолчанию запускать tmux при подключении к хосту, есть два разумных решения:

Директива Match hostне поможет, так как вы не заинтересованы в том, чтобы делать что-то по-другому на основе имени хоста. Я не думаю, что у клиента ssh есть способ делать что-то по-разному в зависимости от того, была ли передана команда ssh. Вы можете выполнить код с помощью Match exec. Я не думаю, что есть чистый способ определить, был ли ssh вызван с помощью команды, но грязный способ может быть достаточно хорош для вас.

Host myhost
Match exec "ps -o args= $PPID | grep -v '.* '"
    RemoteCommand if [ -t 0 ]; then exec tmux new -ADs remote; fi

Если sshбыл вызван только с именем хоста и без параметров, запустите tmux. Если sshбыла вызвана хотя бы с одним параметром или командой в дополнение к имени хоста, директива RemoteCommandне применяется. Также не запускайте tmux, если ввод не поступает с терминала (, например.echo ls | ssh myhost). Это должно позаботиться о большинстве случаев, ошибаясь на стороне не запуска tmux (, например. ssh -L … myhostне запускается tmux ).

5
18.03.2021, 22:37

Начиная с OpenSSH 7.6 , sshимеет параметр командной строки RemoteCommand. Его можно использовать для переопределения соответствующей директивы в ssh_config. Установка его на noneочищает параметр RemoteCommand.

Следовательно, вы можете использоватьssh -o RemoteCommand=none...(или, возможно, в вашем случае rsync -e 'ssh -o RemoteCommand=none'...), чтобы позволить sshигнорировать набор удаленных команд в вашем файле конфигурации.

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

5
18.03.2021, 22:37

Теги

Похожие вопросы