Прямой stderr в файл по ssh

Я пытаюсь выполнить команду на локальном компьютере и направить stderr на удаленный компьютер поверх ssh. Я не могу

ssh remote machine "command 2>stderr.log" 

потому что удаленный компьютер не имеет правильного построения для выполнения команды, и мне нужно запустить команду на моем локальном компьютере. Я еще не пробовал, но я в основном уверен, что мы не можем сделать 2>ssh local machine /dir/stderr.log ?

  • Msgstr "sudo: извините, вы должны иметь tty для запуска sudo" при использовании sudo в удаленном скрипте
  • Как настроить SSH на рабочем столе Ubuntu и связать с ним поддомен для удаленного доступа к внешней сети?
  • Как правильно использовать ssh ControlMaster
  • Конфигурация /etc/pam.d
  • Скопируйте файл sql через ssh с акцентами
  • Как обеспечить, чтобы порт SSH был открыт только для определенного IP-адреса?
  • Как перенаправить список человеческих читаемых путей на другую команду?
  • Как запустить tmux автоматически в оболочке рыбы при подключении к удаленному серверу через ssh
  • Разрешения для файлов ACL для группы, не работающей
  • SSH не указывает, что открытый ключ используется для входа в систему
  • команда ssh и неинтерактивная оболочка без входа
  • При пересылке SSH X11 (`ssh -X`) получите` Can not open display`, пытающийся запустить X-приложения
  • 2 Solutions collect form web for “Прямой stderr в файл по ssh”

    Как я понимаю, вы хотите запустить команду локально, но сохраните вывод stderr в файл удаленного журнала.

    Попробуйте заменить процесс :

     local_command 2> >(ssh somemachine 'cat >logfile') 

    Здесь >(...) является заменой процесса . Он создает файл-подобный объект из команды в parens. Итак, 2> перенаправляет stderr на этот файл-подобный объект, в результате чего вывод сохраняется на удаленном компьютере.

    Или просто используйте обычное перенаправление:

     { local_command 2>&1 1>&3 | ssh somemachine 'cat >logfile'; } 3>&1 

    Здесь stderr перенаправляется на stdout, чтобы мы могли передать его в ssh. Так что stdout не переходит в ssh, мы перенаправляем его на дескриптор файла 3. В конце команды дескриптор файла 3 перенаправляется на stdout, чтобы он отображался на терминале.

    Если вам не нужно отслеживать stderr процесса во время его работы, вы можете использовать временный локальный файл, например

     #!/bin/bash tmpfile=`mktemp` trap '/bin/rm -f $tmpfile ; exit' 0 1 2 3 15 run_command 2> $tmpfile if [ -s $tmpfile ] then scp $tmpfile remoteserver:logfile fi exit 0 

    Если вам нужны «живые» данные, тогда у вас проблемы с буферизацией; отправка stderr над ssh не может быть буферизированной, и поэтому вся эта концепция может быть не лучшим способом ее выполнения.

    Linux и Unix - лучшая ОС в мире.