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