Под прозрачностью я подразумеваю пересылку:
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
одинок вообще?
Сигналы - это область локального ядра; они никогда не передаются по сети.
Хотя вы можете запускать команды в удаленном сеансе ssh с локального компьютера, это не делает волшебным образом события системного уровня на удаленном компьютере доступными локально.
Вам придется обернуть все это в сценарий, который улавливает все (возможные) сигналы и передает их обратно через соединение ssh, но даже тогда они не станут снова волшебными сигналами.
Возможно, что-то вовлекающее nc
больше подходит для перетасовки std {in | out | err}; это тоже не входит в набор инструментов ssh.