2

我有一个脚本,可以通过 SSH 密钥和 linux 系统上的 OTP 启用 OTP / Google Auth。启用 OTP 后,我会向用户发送带有 otpauth URL 的 SMS。我需要从 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 url,他们可以单击以导入令牌/密码管理器,我使用以下内容:

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

如何从 URL 中提取密钥?

4

2 回答 2

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
于 2015-06-16T18:02:40.483 回答
1

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

Regex101.com 示例

于 2015-06-16T18:02:42.090 回答