你如何强制 apple script + aws vault 等待 mfa 访问

how do you force apple script + aws vault to wait for mfa access

我有一个这样的苹果脚本

#!/bin/zsh

tell application "iTerm"
    activate
    select first window

    # Create new tab
    tell current window
        create tab with default profile
    end tell

    # Split pane
    tell current session of current window
        split vertically with default profile
        split vertically with default profile
        split vertically  with default profile
    end tell

    # Exec commands
    tell first session of current tab of current window
        write text "aws-vault exec my-role -d 12h --no-session"
        write text "start him"
    end tell
    tell second session of current tab of current window
        write text "start her"
    end tell
    tell third session of current tab of current window
        write text "start you"
    end tell
    tell fourth session of current tab of current window
        write text "start me"
    end tell
end tell

问题是脚本没有等待我从 aws 命令填写 mfa 信息。我也试过 aws-command; start him 但它只是退出并且根本不执行 start him 。有人 运行 以前参与过这个吗?

我认为这不太可能,因为 Apple Script 无法知道 aws 命令需要 mfa 信息以及您是否完成了该信息的输入。

但是有 2 种非常 hacky 的方法可以实现此目的:

使用delay

这个选项可能非常不可靠,但它可以完成这项工作。 您可以使用 delay 命令让 AppleScript 等待 X 秒直到它运行 write text "start him"。假设您输入 mfa 信息大约需要 10 秒,那么您将使用 delay 10。下面是代码的样子。

# more code above...
    tell first session of current tab of current window
        write text "aws-vault exec my-role -d 12h --no-session"
        delay 10    # <-- change this value to your liking
        write text "start him"
    end tell
# more code below...

使用display dialog

我个人认为这可能是您最可靠的选择。您可以做的是打开一个对话框,输入 mfa 信息后,单击“确定”以便脚本继续运行。所以你会有这样的东西:

# more code above...
    tell first session of current tab of current window
        write text "aws-vault exec my-role -d 12h --no-session"
        display dialog "Click Ok once you are done "
        write text "start him"
    end tell
# more code below...

只是一个小警告:我没有测试上面的代码,因为我没有 macOS 计算机。