我正在尝试编写一个 bash 脚本,用于解锁受 WD 专有软件密码保护的外部驱动器。由于我要将此脚本与其他 bash 脚本结合使用,我需要它来获取一开始提供的密码和read -s -p "Enter WD password: " 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
答案1
wdpassport-utils.py
您所指的脚本使用 Python函数getpass.getpass()
来获取密码。也许最简单的方法是在调用之前使用 bash 脚本(例如使用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
答案2
您应该使用expect
Tcl 扩展。它旨在完成此类自动化任务及其他任务。有一整本书(探索 Expect) 写了关于它的文章,丰富的维基百科页面
在我的评论中,我强调了 expect 和 bash 脚本之间的重要区别。在这种情况下,它应该是expect
脚本,下面是一个例子:
#!/usr/bin/expect -f
spawn ssh aspen
expect "password: "
send "PASSWORD\r"
expect "$ "
send "ps -ef |grep apache\r"
expect "$ "
send "exit\r"
你必须阅读一些指南,例如使用 admin-magazine.com 的 Expect 脚本实现自动化。