Генерация ключей
При создании apt-hosted репозитория Nexus нам необходимо указать signing key, который представляет из себя private-key.gpg в ASCII формате.
Чтобы получить пару ключей gpg
и затем из нее получить приватный ключ, делаем следующее:
sudo apt-get update && sudo apt-get install gpg gnupg -y
gpg --quick-generate-key "my-nexus-repo"
Жмем Y
для согласия создания пары ключей
Вводим passphrase (минимум 8 символом) и повторно для подтверждения
Получаем вывод вида:
gpg: key 362BAA39184DCC84 marked as ultimately trusted
gpg: revocation certificate stored as '/home/jenkins/.gnupg/openpgp-revocs.d/EA125E7BA0A87CCB5DC596D4362BAA39184DCC84.rev'
public and secret key created and signed.
pub rsa3072 2024-01-25 [SC] [expires: 2026-01-24]
EA125E7BA0A87CCB5DC596D4362BAA39184DCC84
uid my-nexus-repo
sub rsa3072 2024-01-25 [E]
Затем, чтобы получить значение приватного ключа в виде текста выполняем команду:
gpg --armor --export-secret-keys EA125E7BA0A87CCB5DC596D4362BAA39184DCC84
Чтобы получить файл публичного ключа (с последующей передачей на разные хосты) выполняем команду:
gpg --export EA125E7BA0A87CCB5DC596D4362BAA39184DCC84 | sudo tee /usr/share/keyrings/my-nexus-repo.gpg >/dev/null
gpg --export EA125E7BA0A87CCB5DC596D4362BAA39184DCC84
экспортирует открытый ключ.
| sudo tee /usr/share/keyrings/my-nexus-repo.gpg
передает вывод команды через tee, который записывает его в файл /usr/share/keyrings/my-nexus-repo.gpg
с привилегиями sudo.
> /dev/null
используется для игнорирования вывода от tee, чтобы он не попал в стандартный вывод терминала.
Текстовый вывод приватного ключа вставляем в поле signing key (в Nexus).
Для корректной работы с репозиторием вам будет необходимо добавить его в список репозиториев на хосте:
echo "deb [signed-by=/usr/share/keyrings/my-nexus-repo.gpg] http://<URL>:<PORT>/repository/my-nexus-repo/ bionic main" >> /etc/apt/sources.list.d/my-nexus-repo.list
- Где
_signed-by=_
это путь к публичному ключу
_bionic_
- это кодовое имя вашего дистрибутива linux (по умолчанию в репозитории Nexus предлагают вписать именно bionic, но если планируется работать с репозиторием с разных дистрибутивов, надо добавить в него все нужные)
Если доступ к репозиторию не анонимный, то надо будет добавить логин/пароль в файл:
echo "machine http://<URL>:<PORT>/repository/my-nexus-repo login LOGIN password PASSWORD" | sudo tee /etc/apt/auth.conf.d/my-nexus-repo.conf > /dev/null