Первый пост, заранее спасибо за любую помощь.
Я немного новичок в написании сценариев в целом, но мне удалось создать хорошую оболочку в bash, которая предназначена для сбора некоторых переменных, а затем для подключения к паре удаленных блоков и выполнения некоторых действий, связанных с веб-статистикой. система и запустить некоторые процессы hadoop. В основном это серия утомительных задач, которые я пытаюсь автоматизировать. (ненужные детали завершены).
Проблема, с которой я сталкиваюсь, заключается в том, чтобы найти способ эффективно подключаться к удаленным серверам, аутентифицироваться как обычный пользователь, а затем переключать пользователей для выполнения различных задач. Вот соответствующий код:
#!/bin/sh
#Script's run as root. this asks for the sudoers pass
read -p "Enter password for $SUDO_USER: " -s password
#Defines some testing commands I want to pass to a remote box
CMD="hostname; id; sudo su -; id; pwd;"
#launches an expect script with some defined variables as arguments.
/home/ME/scripts/derp.expect $SUDO_USER $definedremoteserver "$command" "$password"
Теперь ожидаемый сценарий используется:
#!/usr/bin/expect
#expect script to help with SSH connections for the urchinizer bash script
set arg1 [lindex $argv 0]
set arg2 [lindex $argv 1]
set arg3 [lindex $argv 2]
set arg4 [lindex $argv 3]
spawn ssh -oStrictHostKeyChecking=no $arg1@$arg2 "$arg3"
expect "password:"
send "$arg4\r"
interact
expect "password"
send "$arg4\r"
interact
У меня проблемы с определением, почему это не удается. Я немного исследовал и пробовал многочисленные варианты кода. В основном, когда я запускаю это, мне нужно пройти, и я могу установить первоначальное соединение. Затем скрипт пытается сменить пользователя, и второе ожидание не выполняется. Первые «id» и «hostname» выводятся успешно. Когда происходит переключение пользователя, второе ожидание не работает, и мне остается только запрос пароля. В любом случае я ввожу свой пароль (который по какой-то причине отображается в виде простого текста), и скрипт просто зависает, не выводя вторую команду 'id' и 'pwd', которую я пытаюсь использовать, чтобы убедиться, что это работает.
Если я на самом деле войду в этот ящик и выполню sudo -i или sudo su - вот как выглядит запрос пароля:
[sudo] password for my.name:
Так что для второго (не работающего) ожидания я пробовал несколько разных вариантов с несколько иными результатами, но безуспешно.
Извините за длинный пост. Это сводило с ума. Возможно ли то, что я пытаюсь сделать? Есть ли более разумный способ справиться с этим? Кто-нибудь замечает какие-либо очевидные ошибки? Кроме того, второстепенный вопрос ... как подстановочные знаки работают в этих строках ожидания?