Недавно я приобрел свой первый Yubikey и использую команду ykman oath code на Centos 7, чтобы показать коды доступа, хранящиеся на этом ключе. Я установил пароль на yubikey, который необходимо ввести, чтобы увидеть соответствующие коды клятвы. Я пытаюсь автоматически извлечь эти коды аутентификации с помощью очень простого bash скрипта с именем yubitest.sh
следующим образом
#!/bin/bash
expect <(cat << 'EOF'
spawn ykman oath code
expect "Enter your password: "
send "PASSWORD\r"
EOF
)
ВЫХОД
К сожалению, ПАРОЛЬ передан на yubikey, но, похоже, не обрабатывается, и возврат этого сценария должен выполняться в командной строке следующим образом:
[laptop .ssh]$ ./yubitest.sh (make sure permissions are set to 700)
spawn ykman oath code
Enter your password:
[laptop .ssh]$
Он должен вернуть список кодов от yubikey.
Это результат работы в режиме отладки для expect (используя -d в приведенном выше скрипте после слова expect)
expect version 5.45
argv[0] = expect argv[1] = -d argv[2] = /dev/fd/63
set argc 0
set argv0 "/dev/fd/63"
set argv ""
executing commands from command file /dev/fd/63
spawn ykman oath code
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {29954}
expect: does "" (spawn_id exp6) match glob pattern "Enter your password: "? no
Enter your password:
expect: does "Enter your password: " (spawn_id exp6) match glob pattern "Enter your password: "? yes
expect: set expect_out(0,string) "Enter your password: "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "Enter your password: "
send: sending "PASSWORD" to { exp6 }
Может ли кто-нибудь помочь выделить, почему команда send для expect не передает ПАРОЛЬ правильно ? Также может кто-нибудь посоветовать, как передать результаты этого в переменную окружения?