Назад | Перейти на главную страницу

передать пароль sudo su

Я хотел отправить sudo другому пользователю после ssh'ing на удаленный сервер, для этого я попробовал следующее:

cat remote-test.sh
ssh -t -t abcuser@test-server.net 'bash -s' << EOF
  /tmp/test.sh
EOF

когда я выполняю remote-test.sh с development-server.net, я хотел использовать ssh для test-server.net как abcuser, а затем sudo как xyzuser.

cat /tmp/test.sh

echo "password" | sudo -S su - xyzuser
cd /tmp/some/directory

Может кто-нибудь посоветовать, как передать пароль при выполнении sudo su в скрипте.

Отказаться от использования su и настройте sudo с правильными разрешениями. Это включает редактирование /etc/sudoers и добавление записи, позволяющей пользователю выполнять команду без предоставления пароля.

Вы можете сделать это немного продвинутым

User_Alias SCRIPT_USER johndoe
Cmnd_Alias SCRIPT_PATH /usr/local/bin/myscript.sh

SCRIPT_USER ALL = NOPASSWD: SCRIPT_PATH

Или приобретите то же самое с помощью одной строчки.

johndoe ALL = NOPASSWD: /usr/local/bin/myscript.sh

Вы настраиваете SSH без пароля на localhost как пользователь xyzuser для abcuser чтобы добиться того, что вы пытаетесь. Вам нужно будет добавить abcuserоткрытый ключ как authorized_key для xyzuser.

Затем, когда вы войдете в систему как abcuser, ты можешь сделать:

ssh xyzuser@localhost do_something_as_xyzuser

Если вы заблокировали ssh-доступ к xyzuser, разрешите это только через loopback. Если вы используете Linux, см. Свой /etc/security/access.conf или эквивалент о том, как это сделать.

я очень Предлагаем вам использовать решение, предложенное @pkhamre (правильно настроенный файл sudoers). Это лучший вариант, который дает администратору максимальный контроль.

Если это невозможно, я предлагаю вам использовать решение @skjaidev (ssh authorized_keys). Это не требует, чтобы у вас были права администратора, только доступ к обеим учетным записям, поэтому может быть подходящим для большего количества случаев.

Но если по какой-то причине ни один из этих решений работает на вас ...

Тогда вы хотите использовать ожидать для этого. Вероятно, он уже на вашей машине. Это стандартный инструмент для любого вида интерактивной автоматизации командной строки.