使用oathtool Linux命令行进行两步验证(2FA)

时间:2020-01-09 10:44:02  来源:igfitidea点击:

本教程说明如何在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: 
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."
service"; exit 1; } [ ! -f "$k" ] && { echo "
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.shshell脚本自动执行了此过程,该脚本会解密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码的任何服务重复上述过程。