使用oathtool Linux命令行进行两步验证(2FA)
本教程说明如何在Linux上使用oathtool OTP(一次性密码)来保护您的Gmail和其他在线帐户。
无需等待文本消息,而可以从oathtool Linux命令免费获取验证码。
如何安装oathtool Linux命令行工具
oathtool是用于生成和验证OTP的命令行工具,而gpg2是用于加密oathtool使用的私钥的OpenPGP加密和签名工具。
根据您的Linux发行版执行命令以进行安装。
Fedora Linux安装oathtool
打开终端应用程序,然后执行以下dnf命令:
$ sudo dnf install oathtool gnupg2
CentOS Linux/RHEL安装oathtool
首先在RHEL或者CentOS 7上启用EPEL repo,然后运行以下yum命令:
$ sudo yum install oathtool gnupg2
Debian/Ubuntu Linux安装oathtool
只需使用apt命令或者apt-get命令来安装相同的命令:
$ sudo apt update $ sudo apt upgrade $ sudo apt install oathtool gnupg2
SUSE/OpenSUSE Linux安装oathtool
只需运行以下[nixcmd name = zypper:
$ sudo zypper ref $ sudo zypper in oath-toolkit gpg2
使用oathtool的Linux 2步骤验证(2FA)
生成totp的语法如下:
oathtool -b --totp 'private_key'
通常,当您使用在线服务(例如Google/Gmail,Twitter,Facebook,Amazon,PayPal,银行帐户等)启用2FA时,private_key仅显示一次。
您必须保持private_key的机密,并且不得与任何人共享。
这是为我的Twitter帐户创建代码的示例会话。
$ oathtool -b --totp 'N3V3R G0nn4 G1v3 Y0u Up'
输出示例:
944092
如何从Linux CLI生成两因素身份验证代码
如果没有gpg密钥,请生成一个新的密钥对进行加密,请运行:
$ gpg2 --full-gen-key
接下来,创建一些目录和帮助程序脚本:
$ mkdir ~/.2fa/ $ cd ~/.2fa/
您可以列出GPG密钥,包括GnuPG用户ID和密钥ID,运行:
$ gpg --list-secret-keys --keyid-format LONG
Shell脚本帮助程序脚本,用于加密Totp机密(密钥)
创建一个名为``encrypt.key.sh`的shell脚本:
#!/bin/bash # Purpose: Encrypt the totp secret stored in $dir/$service/.key file # Author: {https://www.theitroad.local/} under GPL v 2.x or above # ------------------------------------------------------------------------- # Path to gpg2 binary _gpg2="/usr/bin/gpg2" ## run: gpg --list-secret-keys --keyid-format LONG to get uid and kid ## # GnuPG user id uid="YOUR-EMAIL-ID" # GnuPG key id kid="YOUR-KEY" # Directory that stores encrypted key for each service dir="$HOME/.2fa" # Now build CLI args s="" k="${dir}/${s}/.key" kg="${k}.gpg" # failsafe stuff [ "" == "" ] && { echo "Usage:#!/bin/bash # Purpose: Display 2FA code on screen # Author: {https://www.theitroad.local/} under GPL v 2.x or above # ------------------------------------------------------------------------- # Path to gpg2 binary _gpg2="/usr/bin/gpg2" _oathtool="/usr/bin/oathtool" ## run: gpg --list-secret-keys --keyid-format LONG to get uid and kid ## # GnuPG user id uid="YOUR-EMAIL-ID" # GnuPG key id kid="YOUR-KEY" # Directory dir="$HOME/.2fa" # Build CLI arg s="" k="${dir}/${s}/.key" kg="${k}.gpg" # failsafe stuff [ "" == "" ] && { echo "Usage:service"; exit 1; } [ ! -f "$k" ] && { echo "https://www.google.com/landing/2step/service"; exit 1; } [ ! -f "$kg" ] && { echo "Error: Encrypted file \"$kg\" not found."; exit 2; } # Get totp secret for given service totp=$($_gpg2 --quiet -u "${kid}" -r "${uid}" --decrypt "$kg") # Generate 2FA totp code and display on screen echo "Your code for $s is ..." code=$($_oathtool -b --totp "$totp") ## Copy to clipboard too ## ## if xclip command found on Linux system ## type -a xclip &>/dev/null [ $? -eq 0 ] && { echo $code | xclip -sel clip; echo "*** Code copied to clipboard too ***"; } echo "$code" # Make sure we don't have .key file in plain text format ever # [ -f "$k" ] && echo "Warning - Plain text key file \"$k\" found."cd ~/.2fa/ ### Step 1. create service directory ### ### [email protected] also act as service name for encrypt.key.sh ### mkdir [email protected] ### Step 2. Store totp secret key ### echo -n 'hilp zs6i c5qu bx7z akiz q75e wk5z z66b' > ~/.2fa/[email protected]/.key- Error: $k file not found."; exit 2; } [ -f "$kg" ] && { echo "### Step 3. Secure totp secret key for service named [email protected] ### ./encrypt.key.sh [email protected]- Error: Encrypted file \"$kg\" exists."; exit 3; } # Encrypt your service .key file $_gpg2 -u "${kid}" -r "${uid}" --encrypt "$k" && rm -i "$k"
Shell脚本助手脚本可解密totp机密并生成2FA代码
创建一个名为`decrypt.key.sh``的shell脚本:
./decrypt.key.sh [email protected]
2FA在Linux命令行中使用oathtool为Gmail帐户
让我们看一个完整的Google/Gmail帐户示例。
要启用2FA访问并登录:
访问两步验证>入门:您可能必须验证您的手机号码。
验证后,向下滚动并选择Authenticator应用:您拥有哪种手机?
选择iPhone或者Android,因为我们将要使用我们的CLI应用程序,然后单击"下一步":确保单击"无法扫描"以查看totp密钥并将其复制:将CD复制到~/.2fa /目录中并运行以下命令:
使用gpg加密名为~/.2fa/[email protected]/.key的totp秘密密钥文件,并使用我们的" encrypt.key.sh"帮助程序脚本出于安全和隐私原因保护密码:
##代码##最后单击"下一步"按钮:现在该使用oathtool命令创建您的第一个6位代码了。
但是,我们使用decrypt.key.sh
shell脚本自动执行了此过程,该脚本会解密totp机密并生成6位2FA代码。
只需运行:
您需要输入gpg密码来解锁名为[email protected]的服务的秘密密钥:最后,您将在屏幕上看到如下所示的6位数代码:30秒后,您需要输入330197代码并单击验证按钮:完成:
如何添加其他服务
语法非常简单:
- 登录到Twitter,Facebook,银行帐户等在线服务,然后查找Authenticator 2FA应用。例如,让我们使用Linux命令行应用程序设置Twitter帐户2FA。
- 从Twitter帐户复制totp机密。
- 创建一个新的服务目录:
mkdir~/.2fa/twitter.com /
- 制作一个新的.key文件:
echo -n'your-twitter-totp-secret-key'>~/.2fa/twitter.com/.key
- 出于安全和隐私原因,生成新的PGP加密文件:~~ ..2fa/encrypt.key.sh twitter.com
- 当您需要登录Twitter时,解密totp机密并生成6位数的2FA代码:
~/.2fa/decrypt.key.sh twitter.com
您可以对显示totp机密和QR码的任何服务重复上述过程。