在 Expect 中询问可能缓存的密码

Ask for a possibly cached password in Expect

我想做一些类似

的事情
systemd-ask-password --keyname=domain:pw --accept-cached Password:

来自 Expect。此命令可以正常工作,从终端到 return 缓存的密码(如果它已经存在)或提示输入它并 然后 缓存它。但是,我还没有找到一种方法让它与 expect.

交互
send "systemd-ask-password --keyname=domain:pw --accept-cached Password:\r"

不产生可交互的输出,并且

spawn "systemd-ask-password --keyname=domain:pw --accept-cached Password:\r"

": no such file or directory... 这意味着生成的进程甚至没有使用相同的密钥环。

我很乐意使用较低级别 keyctl,但我得到的结果与此相同

在 tty 上进行 systemd-ask-passwordkeyctl 提示的正确语法是什么?

如果我将其作为一个 stand-alone 的事情来做 运行 作为衍生的子进程,我预计会以​​这样的方式启动它:

spawn systemd-ask-password --keyname=domain:pw --accept-cached Password:

send这样做的唯一原因是如果有一个 shell 被控制在我们希望它为我们执行的地方(也许是因为它将 运行在远程计算机上)。

可能需要自动处理可能的密码请求和管理结果。当然。但是为了测试,在 spawn 之后放一个 interact 命令,这样你就可以直接与子进程 (as-if-it-was) 对话。

我想你的意思是 运行 使用你当前所在的 tty 的命令。这可以使用 exec 来完成。例如,以下 shell 交互(**** 是我输入 none 的地方):

$ cat <<\! >myprog
set pw [exec systemd-ask-password --keyname=domain:pw --accept-cached Password:]
send_user "you said pw=$pw\n"
!
$ expect myprog
Password: ****
you said pw=none
$ expect myprog
you said pw=none