A necessidade disso surgiu a partir do script abaixo. Ele se conecta a um PC remoto usando o utilitário vpn do anyconnect. Primeiro, ele solicita a senha de uso único, conecta, inicia um cliente RDP e desconecta após o aplicativo cliente RPD ser fechado.
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>
O problema é que a senha de uso único pode mudar durante a execução do vpn -s connect <domain>
. Então eu estava curioso se é possível alterar o script para que ele me permita inserir a senha de uso único após <pin>
ter sido inserida automaticamente? Eu tentei head -c -1
remover o último caractere de nova linha, mas a entrada ainda estava concluída. Qualquer outra solução não baseada em EOF é aceitável.
Você sempre pode fazer:
Que solicita a senha após
vpn
ter sido iniciado e já alimentado<user>\n<pin>
.Ele lê a senha e imprime os prompts no dispositivo tty, alternativamente você pode ler de stdin (remover o
< /dev/tty
) e imprimir o prompt no stderr (substituir> /dev/tty
por>&2
).Se estiver usando
zsh
em vez debash
, você pode simplificar isso para:-s
para suprimir o terminalecho
(aquele também suportado porbash
), preferível para inserir senhas.-e
para ecoar o texto inserido em stdout em vez de armazenar em uma variável?prompt
, string de prompt enviada em stderr, mesma sintaxe queksh
.bash
tem-p
opção para isso.Você provavelmente poderia fazer algo semelhante a isso -
Mas não recomendo por vários motivos.
Apenas um pouco melhor -
Ainda assim, é o que você perguntou.