Two factor authentication with timed one-time passwords is good. But most implementations are for smartphones or tablets.
So I wrote my own, in Perl:
#!/usr/bin/perl
use strict;
use warnings;
use Auth::GoogleAuth;
my $home = $ENV{'HOME'};
my %accounts;
open(my $fh, "-|","gpg -d $home/.2fa.gpg") or die "Can't decrypt file: $!";
while (<$fh>) {
my ($name,$width,$key) = split;
$accounts{$name} = $key;
}
close $fh;
my $auth = Auth::GoogleAuth->new;
if (scalar @ARGV == 0) {
foreach my $name (sort keys %accounts) {
print_key($name);
}
} else {
while (my $arg = shift @ARGV) {
print_key($arg);
}
}
sub print_key {
my $account = shift;
if (exists $accounts{$account}) {
my $code = $auth->code($accounts{$account});
print "$code $account\n";
}
}
Needs a ~/.2fa.gpg file, where the decrypted file looks like:
service1 6 DEFERFGRKHGHRGDFASDTREYRYRYERY serv2 6 RTRYR6RTRE8DGDG9