我最近购买了我的第一个Yubikey,我正在使用Centos 7上的ykman宣誓代码命令来显示存储在这个密钥上的密码。我在yubikey上放了一个密码,必须输入这个密码才能看到适当的宣誓码。我试图使用一个非常简单的bash脚本yubitest.sh自动提取这些auth代码,如下所示
#!/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在调试模式下的输出(在单词expect之后使用上面脚本中的-d )
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 } 有人能帮助突出显示expect的send命令为什么没有正确传递密码吗?另外,有人能建议如何将结果传递给环境变量吗?
发布于 2020-08-05 15:33:23
这是因为expect脚本在ykman完成之前就退出了。在您send密码之后:
expect eof发布于 2020-08-07 01:37:10
我找到了一个很好的解决方案,可以访问存储在yubikey上的代码,而无需使用expect来传递密码。ykman命令使用ykman记忆密码命令将密码的加密版本存储在json文件中的主目录中的yubikey上访问存储的代码。当插入yubikey并运行ykman宣誓代码命令时,它会自动读取这个加密文件,而无需进一步人工干预并提供所需的输出。
https://stackoverflow.com/questions/63264401
复制相似问题