我已经创建了一个 bat 文件,使用包含所需参数的属性文件连接到 Cisco VPN,并且它运行良好。但是,现在添加了一个新步骤,即输入通过短信收到的 OTP。因此,批处理文件无法连接,因为属性文件中不存在 OTP。是否可以阻止批处理文件,直到我手动输入 OTP?以下是批处理文件代码:
taskkill -im vpnui.exe -f
"%PROGRAMFILES(x86)%\Cisco\Cisco AnyConnect Secure Mobility Client\vpncli.exe" disconnect
timeout /t 3 /nobreak
"%PROGRAMFILES(x86)%\Cisco\Cisco AnyConnect Secure Mobility Client\vpncli.exe" -s < "%PROGRAMFILES(x86)%\Cisco\Cisco AnyConnect Secure Mobility Client\file3.txt"
timeout /t 3 /nobreak
答案1
实现此目的的一种简单方法是使用暂停命令等待用户输入;从你的问题中不清楚你想在哪里暂停脚本,所以我无法提供示例,但是,你可以在此处阅读有关此命令的更多信息https://ss64.com/nt/pause.html
答案2
此主题已在帖子中讨论 PowerShell 自动与 Cisco AnyConnect 安全移动客户端建立 VPN 连接。
该帖子包含一个用于自动连接的 PowerShell 脚本,但不处理 OTP。jakawell 的评论对一些用户有用,但我自己没有测试它的环境:
喜欢这个脚本。只是分享一下我为自动导入一次性密码(例如 Google Authenticator 等)所做的一些事情。首先,我安装了这个很棒的开源 Python TOTP/HOTP CLI: https://github.com/JeNeSuisPasDave/authenticator在其中设置 OTP 帐户后,您可以在 Powershell 脚本中获取最新的 OTP,如下所示:
$AuthResult = "foo" | authenticator generate --refresh "once" | Out-String $AuthResult -match '([0-9]{6})' $AuthCode = $matches[0]
只需更新身份验证器密码(上面的 foo)并更新正则表达式以匹配您的 OTP 中的数字位数(我使用了上面的典型的 6 位代码)。
旧答案不适用于 AnyConnect 一次性密码 (OTP)
批处理文件可以要求一个字符串,将变量设置为该字符串,然后在代码中使用该变量。
询问变量:
set /p "otp=Enter OTP: "
可以通过下列方式之一使用它:
echo %otp% | command
command -argument %otp%
参考 :设置命令。
答案3
- 因此,批处理文件无法连接,因为属性文件中不存在 OTP。
- 是否可以阻止批处理文件直到我手动输入 OTP?
- 不!
没有阻止bat文件,不是bat(批处理命令集)干扰了你的需要这是一个单独的命令:
vpncli.exe -s < input_text_file.txt
VPN CLI 搜索信息的位置(他们全部)在您的文本文件中,而没有找到(他们全部),则立即结束。
没有办法将读取文件内容的命令带到处理信息的部分,让其等待缺失的信息,然后继续,更改“界面”并等待某些用户进行输入并转移到“暂停”中的命令,然后对输入进行解释以继续执行。
下一个建议是:
1.使用cisco\vpncli.exe
命令arguments
但不< .\input_text.txt
2.双击你的浴室并使用 vbs 混合模式下的呼叫
3.处理输入(VBS 第二次调用)以输入发送的 OPT 并返回第一次调用
4.使用第二个调用和 sendkey/VBS 将 OPT 输入到第一个 bat 调用的命令中。
5.如果在执行第 1 至第 4 项时遇到任何困难,则返回会提出新问题