Потому что обнаружить бесполезного кота действительно очень сложно.
У меня был сценарий оболочки, в котором я написал
cat | (somecommand <<!
...
/proc/self/fd/3
...
!) 0<&3
Сценарий оболочки не работал в рабочей среде, если cat
был удален из-за того, что он был вызван через su -c 'script.sh' someuser
. Явно лишний cat
заставил владельца стандартного ввода измениться на пользователя, от имени которого выполнялся скрипт, так что его повторное открытие через /proc
сработало.
Как вы поняли, псевдонимы — хорошее решение. Если вы не хотите их использовать, директива Match
может быть еще одним допустимым вариантом.
Host target.server
Match User user1
ProxyCommand ssh -o 'ForwardAgent yes' gateuser1@gateway1.example 'ssh-add && nc %h %p'
Match User user2
ProxyCommand ssh -o 'ForwardAgent yes' gateuser2@gateway2.example 'ssh-add && nc %h %p'
Из справочной страницы ssh_config
:
Match Restricts the following declarations (up to the next Host or Match keyword) to be used only when the conditions following the Match keyword are satisfied.