У меня нет sudo su над именем пользователя, однако у меня есть его пароль. Я хочу иметь скрипт, который передает пароль и дает мне интерактивный bash.

Я попробовал это:

echo mypassword | su - otherusr
Password: Last login: Wed Jul 25 12:09:38 COT 2018
[myuser@myserver ~]$ 

Это возвращает меня к myuser, и у меня нет интерактивного bash с другим пользователем.

Я пробовал также:

echo mypassword | su -c "/bin/bash" - otherusr
echo mypassword | su -s "/bin/bash" - otherusr
echo mypassword | su -c "/bin/bash -i" - otherusr
Password: bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.2$ exit

Как я могу это сделать? Я хочу создать скрипт, который возвращает мне интерактивный сеанс bash с другим пользователем; не просто выполнить команду с другим пользователем.

1 ответ1

0

По умолчанию ни sudo ни su читает пароль из stdin. Они пытаются использовать терминальное устройство напрямую (некоторые реализации могут даже жаловаться при использовании в конвейере). Существует опция 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .