Прозрачные сигналы по SSH

Под прозрачностью я подразумеваю пересылку:

  • stdin, stdout а также stderr
  • стандартные сигналы (SIGHUP или же SIGINT было бы здорово для начала)

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

$ `cat - > /dev/null; sleep 10` < /local/file
$ ssh user@host "cat - > /dev/null; sleep 10" < /local/file

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

Я знаю о запуске sshс -t, но таким образом я не могу отправить данные через stdin, Это возможно с ssh один на всех?

1 ответ

Сигналы являются доменом локального ядра; они никогда не передаются по сетевому каналу.

Хотя вы можете запускать команды в удаленном сеансе ssh с локального компьютера, это волшебным образом не делает локальными доступ к событиям системного уровня на удаленном компьютере.

Вы должны будете обернуть все это в сценарий, который перехватывает все (возможные) сигналы и передает их обратно через ssh-соединение, но даже тогда они волшебным образом не станут сигналами снова.

Возможно, что-то с участием nc было бы более подходящим для перетасовки std {in | out | err} через; это тоже не входит в набор инструментов ssh.

Другие вопросы по тегам