Compare commits
4 Commits
5e31fe1262
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
50f9049c98
|
|||
|
f0d89afee8
|
|||
|
d91bdd1fc0
|
|||
| 6c10f518ce |
@@ -9,6 +9,7 @@ GPG ключи по сравнению с SSH ключами имеют боле
|
||||
- настройка срока действия ключей с возможностью продления в будущем;
|
||||
- привязка ключей к имени пользователя и почте;
|
||||
- возможность загрузки публичных ключей на сервера ключей;
|
||||
- возможность хранения секретных ключей на аппаратном ключе который поддерживает стандарт OpenPGP Card (например Yubikey)
|
||||
|
||||
Под Windows утилита gpg идет вместе с git. Так что можно работать сразу после установки git.
|
||||
|
||||
@@ -81,10 +82,9 @@ gpg --expert --edit-key [id]
|
||||
Прежде удалять мастер ключ или переносить сабключи на карту, необходимо сделать бекап (экспорт) всей нашей работы.
|
||||
|
||||
```
|
||||
gpg -a --export-secret-key [id] > master.key # Экспорт основного ключа
|
||||
gpg -a --export-secret-subkeys [id] > subkeys.key # Экспорт сабключей
|
||||
gpg -a --export [id] public.key # Экспорт публичных ключей
|
||||
|
||||
gpg -a --export-secret-key [id] > master.key # Экспорт мастер ключа (вместе с сабключами)
|
||||
gpg -a --export-secret-subkeys [id] > subkeys.key # Экспорт сабключей (не обязательно)
|
||||
gpg -a --export [id] > public.key # Экспорт общего публичного ключа
|
||||
```
|
||||
|
||||
## Сохранение на аппаратный ключ
|
||||
@@ -108,11 +108,11 @@ gpg --edit-key [id] # входим в режим редактиро
|
||||
|
||||
## Удаление секретных ключей
|
||||
|
||||
Удалем секретный ключ:
|
||||
Удаляем секретные ключи:
|
||||
```
|
||||
gpg --delete-secret-keys [id]
|
||||
gpg --delete-secret-keys [master-key-id]
|
||||
```
|
||||
Удалятся все секретные ключи. Для того чтобы gpg понял что секретные ключи находятся на карте выполняем:
|
||||
Для того чтобы gpg понял что секретные ключи находятся на карте выполняем:
|
||||
```
|
||||
gpg --card-status
|
||||
```
|
||||
@@ -127,7 +127,7 @@ https://keys.openpgp.org/
|
||||
|
||||
Ключи лучше загружать через web-интерфес чтобы получить ссылку для верификации почты.
|
||||
|
||||
После того как public ключ загружен на сервер, можно добавить URL ключа в настройки карты. Тогда будет возможно настравить новый компьютер совсем просто:
|
||||
После того как public ключ загружен на сервер, можно добавить URL ключа в настройки карты. Тогда будет возможно настраивать новый компьютер совсем просто:
|
||||
```
|
||||
gpg --card-edit # Заходим в настройки карты
|
||||
> fetch # Скачиваем public ключ
|
||||
@@ -149,3 +149,68 @@ sign = commit --amend --no-edit -S
|
||||
unsign = commit --amend --no-edit
|
||||
signoff = commit --amend --no-edit -s
|
||||
```
|
||||
|
||||
## Настройка чистой системы для подписи аппаратным ключом
|
||||
|
||||
Если есть аппаратный ключ и нужно настроить подпись коммитов на чистой системе,
|
||||
то можно просто импортировать публичные ключи с карты.
|
||||
Предполагается что `.gitconfig` настроен правильно.
|
||||
|
||||
Предварительно можно очистить все настройки `gpg` удалив папку `~/.gpgconf`
|
||||
|
||||
Если удалить не получается то надо убить процессы:
|
||||
```
|
||||
gpgconf --kill all
|
||||
```
|
||||
|
||||
Импортируем ключи с карты:
|
||||
```
|
||||
gpg --card-edit
|
||||
> fetch
|
||||
> quit
|
||||
```
|
||||
|
||||
Опционально устанавливаем ключу максимальный уровень доверия:
|
||||
```
|
||||
gpg --edit-key [id]
|
||||
> trust
|
||||
5
|
||||
> quit
|
||||
```
|
||||
|
||||
## Продление ключей
|
||||
|
||||
Короткий вариант продлить сразу все ключи:
|
||||
```
|
||||
gpg --import ~/master.key # временно импортируем мастер ключ
|
||||
gpg --quick-set-expire [master-key-fingerprint] 1y '*' # продляем на 1 год с текущей даты
|
||||
gpg --quick-set-expire [master-key-fingerprint] 2025-12-31 '*' # или указываем конкретную дату
|
||||
gpg --delete-secret-keys [master-key-id] # удаляем секретные ключи
|
||||
gpg --keyserver keys.openpgp.org --send-keys [master-key-id] # обновляем на сервере
|
||||
gpg -a --export [master-key-id] > public.key # экспорт публичных ключей
|
||||
# обновляем public.key на всех серверах git
|
||||
```
|
||||
|
||||
Или вручную по одному:
|
||||
```
|
||||
gpg --import ~/master.key # временно импортируем мастер ключ
|
||||
gpg --edit-key [master-key-id]
|
||||
> key 1 # выбираем первый сабключ
|
||||
> expire # редактируем срок действия
|
||||
> 1y # 1 год например
|
||||
> key 1 # снимаем старый выбор
|
||||
> key 2 # выбираем следующий сабключ
|
||||
> expire # редактируем срок действия
|
||||
> 1y # 1 год например
|
||||
> key 2 # снимаем старый выбор
|
||||
> key 3 # выбираем следующий сабключ
|
||||
> expire # редактируем срок действия
|
||||
> 1y # 1 год например
|
||||
> key 3 # снимаем старый выбор
|
||||
> save # сохраняем (локальные ключи сотрутся!)
|
||||
gpg --delete-secret-keys [master-key-id] # удаляем секретные ключи
|
||||
gpg --keyserver keys.openpgp.org --send-keys [master-key-id] # обновляем на сервере
|
||||
gpg -a --export [master-key-id] > public.key # экспорт публичных ключей
|
||||
# обновляем public.key на всех серверах git
|
||||
```
|
||||
Обновлять приватные ключи на аппаратных ключах (Yubikey) не нужно, т.к. там храниться только криптографическая часть, без метаданных.
|
||||
@@ -20,11 +20,12 @@ git config секция.параметр значение
|
||||
|
||||
Делаем базовые настройки:
|
||||
```
|
||||
git config --global user.name "My name" # Имя пользователя по умолчанию для всех коммитов
|
||||
git config --global user.email my@mail.com # Почта пользователя по умолчанию для всех коммитов
|
||||
git config --global color.ui true # Включаем цветной вывод в командах git
|
||||
git config --global core.quotepath off # Для правильного отображение русских имен файлов
|
||||
git config --global fetch.prune true # Автоматическая очистка remote веток удаленных на сервере
|
||||
git config --global user.name "My name" # Имя пользователя по умолчанию для всех коммитов
|
||||
git config --global user.email my@mail.com # Почта пользователя по умолчанию для всех коммитов
|
||||
git config --global color.ui true # Включаем цветной вывод в командах git
|
||||
git config --global core.quotepath off # Для правильного отображение русских имен файлов
|
||||
git config --global core.editor "code --wait" # Для использования vscode редактора для rebase
|
||||
git config --global fetch.prune true # Автоматическая очистка remote веток удаленных на сервере
|
||||
```
|
||||
|
||||
Дополнительно можно настроить удобные элиасы для часто используемых команд.
|
||||
@@ -34,20 +35,32 @@ git config --global fetch.prune true # Автоматическая оч
|
||||
```
|
||||
[user]
|
||||
name = ARNik
|
||||
email = r.anikeev@gmail.com
|
||||
email = arnik@arnik.ru
|
||||
signingkey = AEBB0598F42201E3
|
||||
[color]
|
||||
ui = true
|
||||
[core]
|
||||
quotepath = off # отображение русских имен файлов
|
||||
quotepath = off # отображение русских имен файлов
|
||||
editor = code --wait # vscode редактор для rebase
|
||||
[alias]
|
||||
ll = log --oneline --graph --decorate --all
|
||||
st = status --short
|
||||
co = checkout
|
||||
br = branch
|
||||
ct = commit
|
||||
sign = commit --amend --no-edit -S
|
||||
unsign = commit --amend --no-edit
|
||||
signoff = commit --amend --no-edit -s
|
||||
pr = remote prune origin
|
||||
|
||||
lg = log --graph --all\
|
||||
--pretty=format:'%Cred%h%Creset -%C(auto)%d %Creset%s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
|
||||
--pretty=format:'%Cred%h%Creset -%C(auto)%d %Creset%s %Cgreen(%cr) %C(bold blue)<%an>%Creset %G?'
|
||||
|
||||
# to pevent "fatal: detected dubious ownership in repository"
|
||||
[safe]
|
||||
directory = *
|
||||
[gpg "ssh"]
|
||||
allowedSignersFile = ~/.ssh/allowed_signers
|
||||
```
|
||||
---
|
||||
Для изучения Git и в качестве справки хочу порекомендовать:
|
||||
|
||||
Reference in New Issue
Block a user