Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Подпись пакетов в Astra Linux SE 1.6

Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:

Command

gpg --batch --import secret_key.key

Для проверки правильности импорта:

Command

gpg --list-secret-keys

Для подписывания пакетов может быть использован скрипт.

...

titlesign-deb_package.sh

...

titlesign-deb_package.sh (by PostgresPro)

...


Информация
titleДанная статья применима к:

Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
Astra Linux Special Edition РУСБ.10015-17
Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-16 исп. 1
Astra Linux Special Edition РУСБ.10015-16 исп. 2
Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
Astra Linux Common Edition 2.12


Подписание пакетов в Astra Linux Special Edition 1.6, 8.1, x.7

Установка пакетов

Для осуществления подписания ПО необходимо установить пакеты:

  • bsign;
  • binutils;
  • gzip;
  • lzma;
  • bzip2;
  • gnupg.

Команда для установки пакетов:

Command

sudo apt install bsign binutils gzip lzma bzip2 gnupg

Подготовка к подписанию пакетов

  1. Импортировать закрытый ключ для подписания в набор ключей администратора командой:

    Command

    sudo gpg --import secret_key.key


  2. Проверить правильности импорта:

    Command

    sudo gpg --list-secret-keys


Подписание пакетов

  1. Подписание пакетов должно осуществляться от имени администратора через механизм sudo.
  2. Для подписания пакетов может быть использован сценарий sign-deb.sh. Файл сценария доступен для загрузки с помощью web-браузера по ссылке sign-deb16.sh.
  3. Для настройки сценария в сценарии необходимо указать следующие параметры:

    Информация
    iconfalse
    key_id="<идентификатор_ключа>"
    pass_file="<абсолютный_путь_к_файлу_с_паролем>"


  4. При запуске сценария:

    1. первый аргумент указывает полный путь до каталога, содержащего пакеты, которые необходимо подписать;

    2. второй аргумент указывает полный путь до каталога, в который будут помещены подписанные пакеты, например:

      Command

      sudo ./sign-deb16.sh /root/pkg /root/pkg_sign


Исходный текст сценария:

Блок кода
titlesign-deb16.sh
collapsetrue
#!/bin/bash
#---------------------
key_id=""
pass_file=""
DIR_BIN=$1
DIR_SIGNED=$2
#---------------------
TMP_DIR=$DIR_SIGNED/tmp$$

if [ -z $DIR_BIN ] ; then
    echo "Specify original directory as first argument."
    exit 1
fi

if [ -z $DIR_SIGNED ] ; then
    echo "Specify destination directory as second argument."
    exit 1
fi

if [ ! -e $DIR_BIN ] ; then
    echo "Original directory $DIR_BIN doesn't exist."
    exit 1
fi

list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`

for i in $list_of_packages ; do
    pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
    echo "Unpacking $pack_name"
    mkdir -p $TMP_DIR/{control,data}
    cp $i $TMP_DIR
    pushd $TMP_DIR &>/dev/null
    fakeroot ar x $pack_name
    SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
    data_arch_type=`ls data.tar* | cut -d'.' -f3`
    control_arch_type=`ls control.tar* | cut -d'.' -f3`
    popd &>/dev/null
# Unpack data archive
    pushd $TMP_DIR/data &>/dev/null
    case $data_arch_type in
        gz)
        fakeroot tar --same-permissions --same-owner -xzf ../data.tar.gz
        ;;
        bz2)
        fakeroot tar --same-permissions --same-owner -xjf ../data.tar.bz2
        ;;
        lzma)
        fakeroot tar --same-permissions --same-owner --lzma -xf ../data.tar.lzma
        ;;
        xz)
        fakeroot tar --same-permissions --same-owner -xJf ../data.tar.xz
        ;;
    esac
    popd &>/dev/null

# Unpack control archive
    pushd $TMP_DIR/control &>/dev/null
    case $control_arch_type in
        gz)
        fakeroot 

...

tar --same-permissions --same-owner -

...

xzf ../

...

control.tar.

...

gz
        ;;

...

        

...

bz2)

...

        fakeroot tar --same-permissions --same-owner -

...

xjf ../

...

control.tar.

...

bz2
        ;;
        lzma)
        fakeroot tar --same-permissions --same-owner -

...

-lzma -xf ../

...

control.tar.

...

lzma
        ;;
        xz)
        fakeroot tar --same-permissions --same-owner -

...

xJf ../

...

control.tar.

...

xz
        ;;

...

    esac

...

    popd &>/dev/null

...

# Sign files
    pushd $TMP_DIR/

...

В скрипте необходимо указать

...

titlesign-deb_package.sh
data &> /dev/null
    list=`find . -type f`
    for file in $list ; do
	elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'`
        if [ $elf = "ELF" ]; then
	#if [ "$(file $file | grep ELF)" ];then
            oldstat=`stat -c %a $file`
            bsign -N -s --pgoptions="--batch --

...

pinentry-

...

mode=loopback --passphrase-file

...

где 12345678 - ID ключа, а ./key_password.txt - путь к файлу с парольной фразой.

Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.

Command

 sign-deb_package.sh /root/pkg /root/pkg_sign

Подпись пакетов в ОС 1.4 и выше

Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:

панель
borderColor#c2e6ff
bgColor#e2f3ff
gpg --import key_for_signing.key

Для подписывания пакетов может быть использован скрипт. Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Для корректной работы скрипта в строке:

панель
borderColor#c2e6ff
bgColor#e2f3ff
bsign -s --pgoptions "--default-key=A42E56D6" $file

следует указать идентификатор ключа (слово A42E56D6), с помощью которого необходимо подписать пакет. Идентификатор ключа можно получить, используя команду:

панель
borderColor#c2e6ff
bgColor#e2f3ff
gpg --list-keys

Скачать

Подписывание ПО в среде операционной системы специального назначения «Astra Linux Special Edition» версии 1.5 ключом, сгенерированным для более ранних версий

Подписывание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписывания должен быть импортирован в набор его ключей командой:

панель
borderColor#c2e6ff
bgColor#e2f3ff
gpg --import key_for_signing.key

...

=$pass_file --default-key=$key_id" $file
            bsign -w $file
            newstat=`stat -c %a $file`
            [ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
        else
            echo "$file not ELF"
        fi
    done
    popd &> /dev/null
 
# Counting md5sums
    pushd $TMP_DIR/control &>/dev/null
    if [ -e ./md5sums ] ; then
        filenames=`cat md5sums | awk -F'  ' '{print $2}'`
        popd &>/dev/null
        pushd $TMP_DIR/data &> /dev/null
        for j in $filenames
        do
            echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
        done
        sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
        popd &> /dev/null
        mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums &> /dev/null
        rm -f $TMP_DIR/control/md5sums.new &> /dev/null
    fi

# Packing back in deb
    pushd $TMP_DIR/data &> /dev/null
    case $data_arch_type in
        gz)
        fakeroot tar --same-permissions --same-owner -czf ../data.tar.gz .
        ;;
        bz2)
        fakeroot tar --same-permissions --same-owner -cjf ../data.tar.bz2 .
        ;;
        lzma)
        fakeroot tar --same-permissions --same-owner --lzma -cf ../data.tar.lzma .
        ;;
        xz)
        fakeroot tar --same-permissions --same-owner -cJf ../data.tar.xz .
        ;;
    esac
    popd &> /dev/null
 
    pushd $TMP_DIR/control &> /dev/null
    case $control_arch_type in
        gz)
        fakeroot tar --same-permissions --same-owner -czvf ../control.tar.gz .
        ;;
        bz2)
        fakeroot tar --same-permissions --same-owner -cjvf ../control.tar.bz2 .
        ;;
        lzma)
        fakeroot tar --same-permissions --same-owner --lzma -cvf ../control.tar.lzma .
        ;;
        xz)
        fakeroot tar --same-permissions --same-owner -cJvf ../control.tar.xz .
        ;;
    esac
    popd &> /dev/null
    pushd $TMP_DIR &> /dev/null
    fakeroot ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type &> /dev/null
    cp ${pack_name}  $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
    echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
    popd &> /dev/null
    rm -rf $TMP_DIR  &> /dev/null
done
 
for j in $list_of_udebs ; do
    cp $j $DIR_SIGNED
done

echo "done"
exit 0

Особенности применения ПО, подписанного ключами  для версий Astra Linux Special Edition 1.5 и ниже

Информация

Если ПО было подписано ранее, ключами, сгенерированными для версий Astra Linux Special Edition 1.5 и ниже, обеспечить работу такого ПО в режиме ЗПС можно установив пакет astra-digsig-oldkeys. Открытые ключи необходимо размещать в каталоге /etc/digsig/keys/legacy/keys/

Подписание пакетов в Astra Linux Special Edition РУСБ.10015.01 1.4 и 1.5

Подписание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписания должен быть импортирован в набор ключей администратора командой:

панель
borderColor#c2e6ff
bgColor#e2f3ff
sudo gpg --import key_for_signing.key

Для подписания пакетов может быть использован сценарий. Сценарий должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.

Блок кода
languagebash
titlesign_deb.sh
collapsetrue
#!/bin/bash

key_id="00000000"
pass_file="/root/key_password.txt"

DIR_BIN=$1
DIR_SIGNED=$2

TMP_DIR=$DIR_SIGNED/tmp$$
SIGN_LOG=sign.log

if [ -z $DIR_BIN ] ; then
	echo "Specify original directory as first argument."
	exit 1
fi

if [ -z $DIR_SIGNED ] ; then
	echo "Specify destination directory as second argument."
	exit 1
fi

if [ ! -e $DIR_BIN ] ; then
	echo "Original directory $DIR_BIN doesn't exist."
	exit 1
fi

list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`

for i in $list_of_packages ; do
    pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
    echo "Unpacking $pack_name"
    mkdir -p $TMP_DIR/{control,data}
    cp $i $TMP_DIR
    pushd $TMP_DIR &>/dev/null
    ar x $pack_name
    SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
    data_arch_type=`ls data.tar* | cut -d'.' -f3`
    control_arch_type=`ls control.tar* | cut -d'.' -f3`
    popd &>/dev/null
# Unpack data archive
    pushd $TMP_DIR/data &>/dev/null
    case $data_arch_type in
        gz)
        tar --same-permissions --same-owner -xzf ../data.tar.gz
        ;;
        bz2)
        tar --same-permissions --same-owner -xjf ../data.tar.bz2
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -xf ../data.tar.lzma
        ;;
        xz)
        tar --same-permissions --same-owner -xJf ../data.tar.xz
        ;;
    esac
    popd &>/dev/null

# Unpack control archive
    pushd $TMP_DIR/control &>/dev/null
    case $control_arch_type in
        gz)
        tar --same-permissions --same-owner -xzf ../control.tar.gz
        ;;
        bz2)
        tar --same-permissions --same-owner -xjf ../control.tar.bz2
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -xf ../control.tar.lzma
        ;;
        xz)
        tar --same-permissions --same-owner -xJf ../control.tar.xz
        ;;
    esac
    popd &>/dev/null
 
# Sign files
    pushd $TMP_DIR/data &> /dev/null
    list=`find . -type f`
    for file in $list ; do
	elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'`
        if [ $elf = "ELF" ]; then
	#if [ "$(file $file | grep ELF)" ];then 
            oldstat=`stat -c %a $file`
            bsign -N -s --pgoptions="--default-key=$key_id --passphrase-file=$pass_file" $file
            bsign -w $file
            newstat=`stat -c %a $file`
            [ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
        else
            echo "$file not ELF"
        fi
    done
    popd &> /dev/null
 
# Counting md5sums
    pushd $TMP_DIR/control &>/dev/null
    if [ -e ./md5sums ] ; then
        filenames=`cat md5sums | awk -F'  ' '{print $2}'`
        popd &>/dev/null
        pushd $TMP_DIR/data &> /dev/null
        for j in $filenames
        do
            echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
        done
        sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
        popd &> /dev/null
        mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums &> /dev/null
        rm -f $TMP_DIR/control/md5sums.new &> /dev/null
    fi

# Packing back in deb
    pushd $TMP_DIR/data &> /dev/null
    case $data_arch_type in
        gz)
        tar --same-permissions --same-owner -czf ../data.tar.gz .
        ;;
        bz2)
        tar --same-permissions --same-owner -cjf ../data.tar.bz2 .
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -cf ../data.tar.lzma .
        ;;
        xz)
        tar --same-permissions --same-owner -cJf ../data.tar.xz .
        ;;
    esac
    popd &> /dev/null
 
    pushd $TMP_DIR/control &> /dev/null
    case $control_arch_type in
        gz)
        tar --same-permissions --same-owner -czvf ../control.tar.gz .
        ;;
        bz2)
        tar --same-permissions --same-owner -cjvf ../control.tar.bz2 .
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -cvf ../control.tar.lzma .
        ;;
        xz)
        tar --same-permissions --same-owner -cJvf ../control.tar.xz .
        ;;
    esac
    popd &> /dev/null
    pushd $TMP_DIR &> /dev/null
    ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type &> /dev/null
    cp ${pack_name}  $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
    echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
    popd &> /dev/null
    rm -rf $TMP_DIR  &> /dev/null
done
 
for j in $list_of_udebs ; do
    cp $j $DIR_SIGNED
done

echo "Sign done"

Для корректной работы сценария откорректировать строки сценария:

панель
borderColor#c2e6ff
bgColor#e2f3ff

key_id="000000"
pass_file="/root/key_password.txt"

Заменив значение 00000 на идентификатор ключа,  с помощью которого необходимо подписать пакет, а путь /root/key_password.txt на полный путь к файлу с паролем к ключу. Идентификатор ключа можно получить, используя команду:

панель
borderColor#c2e6ff
bgColor#e2f3ff
gpg --list-keys

Скачать sign-deb_package.sh

Подписание ПО в среде операционной системы специального назначения Astra Linux Special Edition РУСБ.10015-01 1.5 ключом, сгенерированным для более ранних версий

Подписание пакетов должно осуществляться от имени администратора через механизм sudo. Закрытый ключ для подписания должен быть импортирован в набор его ключей командой:

панель
borderColor#c2e6ff
bgColor#e2f3ff
sudo gpg --import key_for_signing.key

где key_for_signing.key — название переданного ключа.

Для подписания пакетов может быть использован сценарий. Сценарий должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.

Блок кода
titlesign-deb.sh
collapsetrue
#!/bin/bash

key_id="00000000"
pass_file="/root/key_password.txt"

DIR_BIN=$1
DIR_SIGNED=$2

TMP_DIR=$DIR_SIGNED/tmp$$
SIGN_LOG=sign.log

if [ -z $DIR_BIN ] ; then
	echo "Specify original directory as first argument."
	exit 1
fi

if [ -z $DIR_SIGNED ] ; then
	echo "Specify destination directory as second argument."
	exit 1
fi

if [ ! -e $DIR_BIN ] ; then
	echo "Original directory $DIR_BIN doesn't exist."
	exit 1
fi

list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`

for i in $list_of_packages ; do
    pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
    echo "Unpacking $pack_name"
    mkdir -p $TMP_DIR/{control,data}
    cp $i $TMP_DIR
    pushd $TMP_DIR &>/dev/null
    ar x $pack_name
    SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
    data_arch_type=`ls data.tar* | cut -d'.' -f3`
    control_arch_type=`ls control.tar* | cut -d'.' -f3`
    popd &>/dev/null
# Unpack data archive
    pushd $TMP_DIR/data &>/dev/null
    case $data_arch_type in
        gz)
        tar --same-permissions --same-owner -xzf ../data.tar.gz
        ;;
        bz2)
        tar --same-permissions --same-owner -xjf ../data.tar.bz2
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -xf ../data.tar.lzma
        ;;
        xz)
        tar --same-permissions --same-owner -xJf ../data.tar.xz
        ;;
    esac
    popd &>/dev/null

# Unpack control archive
    pushd $TMP_DIR/control &>/dev/null
    case $control_arch_type in
        gz)
        tar --same-permissions --same-owner -xzf ../control.tar.gz
        ;;
        bz2)
        tar --same-permissions --same-owner -xjf ../control.tar.bz2
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -xf ../control.tar.lzma
        ;;
        xz)
        tar --same-permissions --same-owner -xJf ../control.tar.xz
        ;;
    esac
    popd &>/dev/null
 
# Sign files
    pushd $TMP_DIR/data &> /dev/null
    list=`find . -type f`
    for file in $list ; do
	elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'`
        if [ $elf = "ELF" ]; then
	#if [ "$(file $file | grep ELF)" ];then 
            oldstat=`stat -c %a $file`
            bsign -9 -N -s --pgoptions="--default-key=$key_id --passphrase-file=$pass_file" $file
            bsign -w $file
            newstat=`stat -c %a $file`
            [ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
        else
            echo "$file not ELF"
        fi
    done
    popd &> /dev/null
 
# Counting md5sums
    pushd $TMP_DIR/control &>/dev/null
    if [ -e ./md5sums ] ; then
        filenames=`cat md5sums | awk -F'  ' '{print $2}'`
        popd &>/dev/null
        pushd $TMP_DIR/data &> /dev/null
        for j in $filenames
        do
            echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
        done
        sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
        popd &> /dev/null
        mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums &> /dev/null
        rm -f $TMP_DIR/control/md5sums.new &> /dev/null
    fi

# Packing back in deb
    pushd $TMP_DIR/data &> /dev/null
    case $data_arch_type in
        gz)
        tar --same-permissions --same-owner -czf ../data.tar.gz .
        ;;
        bz2)
        tar --same-permissions --same-owner -cjf ../data.tar.bz2 .
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -cf ../data.tar.lzma .
        ;;
        xz)
        tar --same-permissions --same-owner -cJf ../data.tar.xz .
        ;;
    esac
    popd &> /dev/null
 
    pushd $TMP_DIR/control &> /dev/null
    case $control_arch_type in
        gz)
        tar --same-permissions --same-owner -czvf ../control.tar.gz .
        ;;
        bz2)
        tar --same-permissions --same-owner -cjvf ../control.tar.bz2 .
        ;;
        lzma)
        tar --same-permissions --same-owner --lzma -cvf ../control.tar.lzma .
        ;;
        xz)
        tar --same-permissions --same-owner -cJvf ../control.tar.xz .
        ;;
    esac
    popd &> /dev/null
    pushd $TMP_DIR &> /dev/null
    ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type &> /dev/null
    cp ${pack_name}  $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
    echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
    popd &> /dev/null
    rm -rf $TMP_DIR  &> /dev/null
done
 
for j in $list_of_udebs ; do
    cp $j $DIR_SIGNED
done

echo "Sign done"

Для корректной работы сценария в строках:

панель
borderColor#c2e6ff
bgColor#e2f3ff

key_id="000000"
pass_file="/root/key_password.txt"

заменить 00000 на идентификатор ключа,  с помощью которого необходимо подписать пакет, а вместо /root/key_password.txt - указать полный путь к файлу с паролем к ключу

Подсказка
borderColor#c2e6ff
bgColor#e2f3ff
iconfalse
bsign -s --pgoptions "--default-key=A42E56D6" $file

на:

Подсказка
iconfalse
bsign -s -9 --pgoptions "--default-key=A42E56D6" $file

...

. Идентификатор ключа можно получить, используя команду:

панель
borderColor#c2e6ff
bgColor#e2f3ff
gpg --list-keys

Далее следуйте

...

указаниям в документации.

...