Прозрачные сигналы по 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.