监视终端的特定提示并自动输入响应

监视终端的特定提示并自动输入响应

我正在使用 ZSH,想知道是否有办法观察特定提示的标准输出,然后自动输入响应?

具体来说,我希望在出现以下提示时自动填充 MFA 令牌;

Enter MFA code for arn:aws:iam::111111111111:mfa/jdoe:

我可以通过使用http://soundly.me/oathplus/工具,但想让它无缝地工作,所以我不需要手动输入令牌。

要求:

我想将脚本(可能使用 expect)包含在 ~/.zshrc 文件中。这将在启动 shell/终端时加载一次,然后等待提示“输入 arn:aws:iam::111111111111:mfa/jdoe: 的 MFA 代码”。然后我将以正常方式使用终端,并可能最终使用触发 MFA 令牌提示的命令。

请注意,执行相同命令时,MFA 令牌提示不会总是弹出,因为它取决于之前的连接是否仍然有效。此外,可能有些天我不使用会触发 MFA 令牌提示的命令,但此脚本仍会在后台运行,一旦实际出现令牌提示,它就会立即生效。由于令牌本身仅在一分钟内有效,因此需要在提示弹出后生成令牌。

答案1

期望会是这样的:

expect -c '
    set mfa_token "your token here"
    set mfa_prompt "Enter MFA code for arn:aws:iam::111111111111:mfa/jdoe:"
    spawn zsh
    interact {
        -o $prompt {send_user $prompt; send "$mfa_prompt\r"}
    }
'

这会将您带入 zsh,然后您可以像普通交互式 shell 一样与其进行交互。

监视-o来自 shell 输出的提示,并自动发送令牌。

目前,Expect 的用途相当狭窄,但这是在驾驶范围内的。

相关内容