Kody jednorazowe czyli One Time Password (OTP) służą jako dodatkowe zabezpieczenie np. konta e-mail. Do generowania kodów przeważnie używa się aplikacji na telefon typu Google Authenticator. Do wygenerowania kodu OTP jest potrzebny tajny kod w postaci ciągu znaków Base32 lub Hex.
W systemmie Linux istnieje takie narzędzie jak oathtool
, jednak za każdym
razem trzeba podać tajny kod, wię jest to dość uciążliwe. Dlatego do
przechowywania kodów użyjemy programu pass
, który potrafi szyfrować hasła
za pomocą klucza PGP.
Instalacja niezbędnych programów
dnf install oathtool gnupg2 pass fzf
Jeśli posiadamy już klucz PGP możemy sprawdzić jego nazwę oraz jego ID w innym
przypadku należy wygenerować klucz PGP za pomocą polecenia
gpg2 --full-generate-key
. Proces generowania klucza jest opisany na stronie
https://sebmd.github.io/posts/generowanie-klucza-gnupg-pgp/
Sprawdźmy jakie posiadamy klucze za pomocą polecenia gpg2 --list-secret-keys
gpg2 --list-secret-keys /home/testowy/.gnupg/pubring.kbx -------------------------------- sec rsa2048 2019-04-19 [SC] 4E70814B987ECB1AC675A5BD9B76BB5DDC8ADBE0 uid [ absolutne ] testowy (komentarz) <testowy@example.com> ssb rsa2048 2019-04-19 [E]
Inicjalizacja programu pass
, wymaga podania ID tajnego klucza PGP
pass init 4E70814B987ECB1AC675A5BD9B76BB5DDC8ADBE0 mkdir: utworzony katalog '/home/testowy/.password-store/' Password store initialized for 4E70814B987ECB1AC675A5BD9B76BB5DDC8ADBE0
Jak widać dane będą przechowywane w katalogu ~/.password-store/
Dodanie konta do pass
najlepiej poprzedzić jakimś wyrazem np. otp
spowoduje to,
że tajne klucze będą przechowywane w podkatalogu otp
, dzięki czemu można będzie
łatwiej je znaleźć.
Dodanie konta testowy@gmail.com
pass edit otp/testowy@gmail.com
Wyświetlenie hasła dla konta testowy@gmail.com
pass otp/testowy@gmail.com RWNLFJJNKP2B2VS4
Wygenerowanie kodu jednorazowego dla tajnego klucza RWNLFJJNKP2B2VS4
.
oathtool --base32 RWNLFJJNKP2B2VS4 --totp 091421
Teraz złóżmy to wszystko razem:
oathtool --base32 --totp "$(pass "otp/$(find ~/.password-store/otp/* -exec basename {} .gpg \; | fzf)")"
Żeby było jeszcze łatwiej proponuję stworzyć aliasy otp
i otp-add
w pliku ~/.bashrc
alias otp='oathtool --base32 --totp "$(pass "otp/$(find ~/.password-store/otp/* -exec basename {} .gpg \; | fzf)")"'
Dla aliasu otp-add
stworzymy funkcję o tej samej nazwie, dodatkową zaletą funkcji
jest to, że jeśli podamy nazwę konta ze spacjami to zostaną one zastąpione znakiem -
.
function otp-add() {
if [ -z $1 ]; then
echo
echo Podaj nazwę konta.
echo
else
nazwa=$(echo "$@" | tr ' ' '-')
pass edit otp/$nazwa
fi
}
alias otp-add=otp-add
W skrócie działa to tak:
-
pass
przechowuje tajne kody zaszyfrowane kluczem PGP -
oathtool
generuje kody jednorazowe podawane przezpass
-
fzf
ułatwia wyszukiwanie
Date: 2020-10-24T19:53:23+02:00 |