По умолчанию ни один из них sudo
не su
читает пароль из стандартного ввода. Они пытаются использовать терминальное устройство напрямую (некоторые реализации могут даже жаловаться при использовании в конвейере). Существует sudo -S
возможность изменить это поведение, но, насколько я знаю, подобного варианта не существует su
.
Решение: использовать expect
.
expect
это программа, которая «общается» с другими интерактивными программами по сценарию. Следуя сценарию,expect
знает, чего можно ожидать от программы и каков должен быть правильный ответ.[...]
В общем,
expect
полезно для запуска любой программы, которая требует взаимодействия между программой и пользователем. Все, что необходимо, - это то, что взаимодействие можно охарактеризовать программно.
В вашем случае сценарий может быть:
#!/usr/bin/expect log_user 0 spawn /bin/su - otherusr expect "Password: " send "mypassword\n" interact
Советую сделать этот скрипт доступным только вам ( chmod go-rwx
). Другие пользователи не должны иметь права читать его, потому что он содержится mypassword
в открытом тексте; им нельзя разрешать запускать его, потому что он дает доступ к otherusr
оболочке.