对此的需要来自下面的脚本。它使用 anyconnect 的 vpn 实用程序连接到远程 PC。首先,它要求输入一次性密码,连接,启动 RDP 客户端,并在 RPD 客户端应用程序关闭后断开连接。
if [ $# == 1 ]; then
ONE_TIME_PWD=$1;
else
printf "Enter the one-time password: ";
read ONE_TIME_PWD;
fi
vpn -s connect <domain> << EOF
<user>
<pin>$ONE_TIME_PWD
EOF
# Use some RDP client here like xfreerdp or rdesktop
vpn -s disconnect <domain>
问题是一次性密码在执行过程中可能会改变vpn -s connect <domain>
。<pin>
所以我很好奇是否可以更改脚本,以便它让我在自动插入后输入一次性密码?我已经尝试head -c -1
删除最后一个换行符,但输入仍然完成。不基于 EOF 的任何其他解决方案都是可以接受的。
你总是可以这样做:
vpn
启动后提示输入密码<user>\n<pin>
。它读取密码并在 tty 设备上打印提示,或者您可以从 stdin 读取(删除
< /dev/tty
)并在 stderr 上打印提示(替换> /dev/tty
为>&2
)。如果使用
zsh
而不是bash
,您可以将其简化为:-s
抑制终端echo
(也被支持的终端bash
),而不是输入密码。-e
在 stdout 上回显输入的文本而不是存储到变量中?prompt
, 在 stderr 上发送的提示字符串,与ksh
.bash
有一个-p
选择。你可能会做类似的事情 -
但我不推荐它有几个原因。
只是稍微好一点——
不过,这还是你问的。