Я пытаюсь создать сценарий bash, используемый для разблокировки внешнего диска, который защищен паролем с помощью проприетарного программного обеспечения WD.
Поскольку Я комбинирую это с другими сценариями bash, Мне нужно, чтобы он взял пароль, указанный в начале с помощью read -s -p "Введите пароль WD:" wdpass
и используйте его, когда запрашивается сценарием WD .
Вот что у меня есть на данный момент:
#!/bin/bash
sudo blkid #only need this to get the sudo password right away
wait
read -p "Enter drive ID (ie. sda): " driveid
read -s -p "Enter WD password: " wdpass
sudo apt install python3 python3-dev python3-pip git; sudo pip3 install git+https://github.com/evox95/wdpassport-utils
sudo pip3 install --user git+https://github.com/crypto-universe/py_sg
cd ~; wget https://raw.githubusercontent.com/evox95/wdpassport-utils/master/wdpassport-utils.py
sudo ~/wdpassport-utils.py --unlock --device /dev/$driveid
expect "[wdpassport] password for /dev/${driveid}: "
send "$wdpass"
wait
Я также пробовал следующие комбинации вместо expect
и send
(но ничего не помогло):
sudo ~ / wdpassport -utils.py --unlock --device / dev / $ driveid <(echo «$ wdpass»)
echo «$ wdpass»
echo $ wdpass
«$ wdpass»
$ wdpass
Сценарий wdpassport-utils.py
, на который вы ссылаетесь, использует функцию Python getpass.getpass()
для получения пароля. Может быть, самым простым методом будет просто изменить это значение с помощью бэш-скрипта (например, используя sed
) на input()
(который будет читать входные данные из stdin) перед вызовом wdpassport-utils. py
, а затем используйте строку, упомянутую выше:
sudo ~/wdpassport-utils.py --unlock --device /dev/$driveid <(echo "$wdpass")
или, в более общем виде:
echo "$wdpass" | sudo ~/wdpassport-utils.py --unlock --device /dev/$driveid
Следует использовать расширение 'expect' до Tcl. Оно предназначено для таких задач автоматизации и многое другое. Об этом написана целая книга ("Exploring Expect"). https://en.wikipedia.org/wiki/Expect