使用正则表达式提取OTP密钥

时间:2015-06-16 17:56:15

标签: regex bash sed google-authenticator

我有一个脚本可以通过SSH密钥和Linux系统上的OTP启用OTP / Google Auth。启用OTP后,我会向用户发送带有otpauth URL的短信。我需要从otpauth URL中提取(通常是16位数字的密钥)。

如果他们想要可见的QR码,则URL的示例如下:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host.com%3Fsecret%3DWFHGHUFAUYXZFA44%26issuer%3DCOMPANY

如果他们想要一个otpauth网址,他们可以点击导入令牌/密码管理器,我使用以下内容:

otpauth://totp/user@host.com%3Fsecret%3DWFHGHUFAUYXZFA44%26issuer%3DCOMPANY

如何从URL中提取密钥?

2 个答案:

答案 0 :(得分:1)

使用grep -oP

url='https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host.com%3Fsecret%3DWFHGHUFAUYXZFA44%26issuer%3DCOMPANY'

grep -ioP '[?&]chl=.+?%3Fsecret%3D\K[^%]+' <<< "$url"
WFHGHUFAUYXZFA44

答案 1 :(得分:1)

secret%3D(.*?)(?=%|$)会找到'秘密',%3D,然后是数字,直到它到达行尾或另一个%字符。

Regex101.com example