Возможный я нашел решение как этот:
#/bin/bash
ssh -t -x root@db-host 'mysqldump db' -r file.sql
Так - я использую '-t' вместо '-n'. Удаление '-n' или использование другого пользователя, чем корень не помогают.
Вы знаете то, что делают опции, Вы являетесь передающими к ssh? Я предполагаю нет.-n вход перенаправлений опции от/dev/null, таким образом, процесс Вы работаете на удаленном хосте, вероятно, не видит SIGINT от Ctrl-C.
Теперь, давайте говорить о том, как плохо идея это должно позволить удаленные корневые логины:
Это действительно, действительно плохая идея. Взгляните на ПРАКТИЧЕСКОЕ РУКОВОДСТВО: настроенные ssh ключи для некоторых предложений, как надежно справиться с удаленным выполнением процесса по ssh. Если необходимо выполнить что-то с полномочиями удаленно, Вы, вероятно, захотите решение, которое связало ssh открытый ключ со встроенной командой и сценарием, который работает как корневая любезность sudo.
trap "some_command" SIGINT
выполнится some_command
локально, когда Вы нажмете Ctrl+C. help trap
скажет Вам о его других опциях.
Относительно эти ssh
проблема, я не знаю много о ssh. Возможно, можно ли заставить его звонить ssh -n -x root@db-host 'killall mysqldump'
вместо some_command
для уничтожения удаленной команды?
По окончании сеанса ssh ваша оболочка получит сигнал SIGHUP. (сигнал отбоя). Вы должны убедиться, что он отправляет это всем процессам, запущенным с него. Для bash попробуйте shopt -s huponexit; ваша_команда
. Это может не сработать, потому что на странице руководства сказано, что huponexit работает только с интерактивными оболочками.
Я помню, как сталкивался с этим с пользователями, выполняющими задания в моем кластере, и независимо от того, должны ли они использовать nohup или нет (чтобы получить поведение, противоположное тому, что вы хотите), но я не могу найти ничего на странице руководства bash о том, игнорируют ли дочерние процессы SIGHUP по умолчанию. Надеюсь, huponexit поможет. (Думаю, вы можете поместить этот магазин в свой .bashrc, а не в командную строку.)
Ваш ssh -t
должен работать, однако, поскольку при закрытии соединения выполняется чтение с терминала получит EOF или ошибку,