【发布时间】:2021-07-12 17:48:44
【问题描述】:
我想要自动化的与 cryptsetup 的简单交互是这样的:
cryptsetup luksFormat /dev/loop20
WARNING: Device /dev/loop20 already contains a 'crypto_LUKS' superblock signature.
WARNING!
========
This will overwrite data on /dev/loop20 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/loop20:
Verify passphrase:
以下期望脚本尝试执行此操作:
spawn cryptsetup luksFormat /dev/loop20
expect "yes): " { send "YES\n" }
expect ": "
send "passphrase\n"
expect ": "
send "passphrase\n"
expect eof
当 YES 正确发送时,它会在密码提示符处挂起。除了发送命令中的 \n 之外,我还尝试使用 \r。
相同的脚本结构适用于 ssh 密码或 sudo 密码提示,所以我有点迷失了这里的不同之处。我知道有“预期较少”的方法,例如 echo passphrase | cryptsetup ...,但我真的很想了解潜在的问题以及是否有解决方案。
【问题讨论】:
-
使用
expect -d运行脚本并查看模式是否匹配。 -
您通常需要在匹配密码提示后插入等待(例如
sleep 1),以允许将 tty 设置为无回显模式以及关联的输入刷新。