Как я могу SSH на несколько защищенных паролем машин для их перезагрузки?

Это то, для чего предназначен select .

PS3="Would you like to input some text? <Y/N>   ]"
select choice in "Y" "N"; do
   case $choice in
      "Y")
          echo -n "Please input some text >"
          read input
          echo "$input"
          break
          ;;
      "N")
          echo "Very well."
          break
          ;;
      *)
          echo "Invalid response."
          ;;
    esac
done
-1
29.11.2018, 03:49
1 ответ

Встроить Expect в сценарии оболочки непросто. Я приведу вам пример с использованием инструмента sexpect .

Код:

[STEP 101] # cat foo.xsh
user=foo
passwd=foobar
while read host; do
    echo ==== $host ====
    export SEXPECT_SOCKFILE=~/tmp/host-$host-$$.sock

    sexpect spawn \
        ssh -o StrictHostKeyChecking=no \
            -o ConnectTimeout=5 \
            -o UserKnownHostsFile=/dev/null \
            -t \
            $user@$host bash --norc
    sexpect expect -i password:
    sexpect send -enter "$passwd"
    sexpect expect -re 'bash-[.0-9]+[#$] $'

    sexpect send -enter "sudo date"
    sexpect expect -i -re "password( for [^[:blank:]]+):"
    sexpect send -enter "$passwd"
    sexpect expect -re 'bash-[.0-9]+[#$] $'

    sexpect send -enter exit
    sexpect wait
done < hosts-file

Тестирование:

[STEP 102] # cat hosts-file
host1
host2
[STEP 103] # bash foo.xsh
==== host1 ====
foo@host1's password:
bash-4.4$ sudo date
[sudo] password for foo:
Thu Nov 29 14:28:39 CST 2018
bash-4.4$ exit
exit
Connection to host1 closed.
==== host2 ====
foo@host2's password:
bash-4.4$ sudo date
[sudo] password for foo:
Thu Nov 29 14:28:40 CST 2018
bash-4.4$ exit
exit
Connection to host2 closed.
[STEP 104] #
1
28.01.2020, 05:07

Теги

Похожие вопросы