Pass - это небольшой bash-скрипт хранящий пароли в обычных текстовых файлах зашифрованных с помощью GPG. Файлы можно организовывать в директории, при этом имя файла является названием сайта или ресурса для которого файл хранит пароль. Файлы имеют очень простой формат: первая строка содержит только пароль, все остальные строки содержат любые другие данные. Например, файл github.com.gpg может иметь такое содержимое:
md3rTks3!=
login: Maria
url: https://github.com/login
email: maria@example.com
Указывать поля вида login:
и url:
именно в таком формате не обязательно, но подобные метаданные позволяют менеджеру паролей автоматически подставлять ваш логин на веб-сайтах.
Очень простой формат файла и организации хранения паролей дает нам большие возможности: мы можем просматривать и редактировать пароли без установленной программы pass (достаточно иметь установленные GnuPG и любой текстовый редактор), мы можем писать свои скрипты для работы с паролями, мы можем хранить все изменения паролей в системе контроля версий git и синхронизировать пароли на разных компьютерах через неё же. Также pass имеет большую поддержку со стороны сообщества: существуют реализации программы для Android и iOS, плагины для веб-браузеров Chrome и Firefox, графические клиенты для Windows, Mac и Linux, расширения для Alfred, dmenu, rofi и Emacs, скрипты для импорта паролей из других приложений.
В этой статье мы рассмотрим именно консольную версию, доступную на сайте https://www.passwordstore.org/
Установка
Установить программу вы можете с помощью пакетного менеджера своего дистрибутива, например:
- для Ubuntu \ Debian:
sudo apt-get install pass
- для ArchLinux:
pacman -S pass
- для macOS:
brew install pass
Предварительная настройка
Чтобы использовать программу вам нужен gpg-ключ, которым будут шифроваться файлы с паролями. Если у вас ещё нет своего ключа, то прочтите вот эту статью и создайте его.
Далее пишем в терминале pass init gpg-id
, где вместо gpg-id вам необходимо вписать id вашего gpg ключа. Проще всего это сделать нажав Tab
после того как вы написали pass init и выбрав один из предложенных автодополнением вариантов.
Эта команда создаст директорию ~/.password-store в которой будут храниться ваши пароли и запомнит каким ключом их шифровать (вы также можете использовать разные gpg ключи для разных поддиректорий, для этого есть флаг -s: pass init -s поддиректория second-gpg-id
)
Если вы хотите, чтобы директория с паролями хранилась в git-репозитории, то выполните команду pass git init
. После этого при каждом создании\изменении паролей pass будет автоматически делать коммит в репозиторий.
Использование
Чтобы добавить пароль выполите команду pass insert email/your@email.ru
и введите пароль который хотите сохранить.
Эта команда создаст поддиректорию email в хранилище паролей, добавит в неё зашифрованый текстовый файл your@email.ru.gpg, в котором сохранит введённый вами пароль.
Если вам нужно по-быстрому сгенерировать пароль, то можете написать pass generate youtube.com 15
. Эта команда сгенерирует новый пароль длинной 15 символов, запишет его в файл youtube.com.gpg и покажет на экране. Если вы добавите опцию -n, то пароль будет состоять только из букв и цифр (без специальных символов), если добавите опцию -c, то пароль сразу будет скопирован в буфер обмена.
Ранее я писал, что в файле может содержаться не только пароль, но и другая текстовая информация (например логин или просто какие-то заметки). Для того что бы записать несколько строк в файл вы можете использовать опции –multiline или -m: pass insert -m web/github.com
. Напоминаю: пароль вводится в первой строке, а все остальные данные уже после него на отдельных строках (см. пример в начале статьи). Что бы закончить ввод и сохранить данные нажмите Ctrl+d.
Изменить файл с паролем можно командой pass edit web/github.com
. При этом откроется редактор указанный в переменной окружения EDITOR. Этой командой также можно добавлять в хранилище новые пароли, если вам удобнее делать это через текстовый редактор.
Для удаления файла с паролем используется команда pass rm web/github.com
, а для переименования pass mv старое_название новое_название
.
Для того чтобы показать пароль на экране просто введите pass web/github.com
. При этом, чтобы не вводить длинные названия сайтов, вы можете пользоваться автодополнением bash нажимая клавишу Tab
. Используйте флаг -c чтобы сразу скопировать пароль в буфер обмена: pass -с web/github.com
.
Посмотреть какие вообще есть записи в хранилище можно просто введя pass
(а для просмотра записей в отдельной директории pass имя_директории
).
Вы можете искать файлы по части названия pass find строка_поиска
и, более того, вы можете искать внутри всех файлов с паролями pass grep строка_поиска
(правда это действие довольно медленное).
Версионирование и синхронизация
Выше я писал, что если вы выполните команду pass git init
, то программа создаст внутри хранилища паролей git-репозиторий и будет автоматически коммитить все изменения. А это означает, что из коробки у нас появляется синхроницация паролей на разных компьютерах.
Вы можете использовать любые команды git, написав перед ними слово pass
. Это нужно, чтобы перед их вызовом вам не приходилось каждый раз переходить в директорию ~/.password-store.
Добавляем адрес репозитория на вашем сервере pass git remote add origin your-remote-server.com:pass-store
.
Забираем с него файлы с паролями pass git pull
.
Сохраняем локально добавленные или изменённые пароли на удаленный сервер pass git push
.
Заключение
Как видите pass очень простая, но мощная утилита, следующая философии unix. Часто её ругают за то, что названия файлов с паролями хранятся в открытом виде (а они обычно представляют собой названия сайтов на которых вы зарегистрированы). Но лично мне нравится настолько простой формат хранения паролей.