2014-05-21 4 views
2

Я хочу создать сценарий генерации ключа GnuPG для одного человека, который, хотя они запускают ubuntu, не чувствует себя комфортно с помощью CLI. Кроме того, кто-то еще управляет своим компьютером, сохраняя его в актуальном состоянии и в хорошем рабочем состоянии, поэтому у них нет доступа root/sudo. И я действительно хотел бы попытаться избегать делать как можно больше инструкций по телефону ... было слишком много раз, чтобы узнать, что такое PITA!Необязательный скрипт командной строки GPG зависает в команде GPG

Итак, я взломал этот сценарий, сильно заимствуя из примера, который я нашел на форумах gnupg.org (я думаю?). Но он ничего не делает, как только команда gpg --gen-key --batch запускается независимо от того, сколько активности мыши будет создано за 3 или 4 минуты. Все инструкции echo btw являются лишь временным средством для указания прогресса скрипта, который не очень далек.

#!/bin/bash 

# First run give your server some work, otherwise gpg won't be able to generator random bytes. 
#sudo rngd -r /dev/urandom 
#no sudo so: 
echo -e "\nYou need to begin moving your mouse continuously and in random patterns for as long as it takes to generate a new key. This could take a minute or two, so be patient and just keep moving the mouse.\n" 

echo -e "\ngpg --gen-key --batch\n" 
gpg --batch --gen-key 

%echo Generating a default key 
Key-Type: default 
Key-Length: 2048 
Subkey-Type: default 
Name-Real: Firstname Lastname 
Name-Comment: No comment 
Name-Email: [email protected] 
Expire-Date: 0 
Passphrase: abcde 
%pubring foo.pub 
%secring foo.sec 
# Do a commit here, so that we can later print "done" :-) 
%commit 
%echo done 

# kill the rngd task. 
#sudo service rng-tools stop 


echo -e "\ngpg -k\n" 
gpg -k 

# get key id for newly created passkey 
echo -e "\nkId=$(gpg -k Firstname|grep pub|sed -r 's/^pub[ ]*2048R\/([A-Z0-9]{8,})[ ]*.*$/\1/')\n" #; echo "\$kId: ${kId}" 
kId=$(gpg -k Firstname|grep pub|sed -r 's/^pub[ ]*2048R\/([A-Z0-9]{8,})[ ]*.*$/\1/') ; echo -e "\n\$kId: ${kId}\n" 

# set key as the default key (if desired) by entering this line in your ~/.bashrc 
echo -e "\nexport GPGKEY=$kId\n" 
export GPGKEY="$kId" 

# restart the gpg-agent and source your .bashrc again 
echo -e "\nkillall -q gpg-agent\n" 
killall -q gpg-agent 
eval $(gpg-agent --daemon) 
source ~/.bashrc 

#create revocation cert 
echo -e "\ngpg --output revoke.asc --gen-revoke $GPGKEY\n" 
gpg --output revoke.asc --gen-revoke $GPGKEY 

# send public key to keyserver 
echo -e "\ngpg --send-keys --keyserver keyserver.ubuntu.com $GPGKEY\n" 
#gpg --send-keys --keyserver keyserver.ubuntu.com $GPGKEY 

Интересно, может ли кто-либо увидеть какие-либо очевидные проблемы или упущения, подающие «gpg» необходимые ключевые данные?

Я получаю то же самое, даже если я запускаю скрипт с помощью команды sudo rngd -r /dev/random, которую мне нужно обойти для предполагаемого пользователя (без доступа к sudo).

Итак, я думаю, что проблема заключается в ключевых параметрах, которые я хочу передать в gpg, но у меня есть крест, на которые они ссылаются на странице руководства, и, похоже, не может найти, что может быть проблемой. Это смешно, хотя gpg не возвращает ошибку.

+0

Где находится GnuPG или ваш скрипт? Вам может потребоваться использовать '% no-ask-passphrase'. Если у вас недостаточно энтропии, просто продолжайте работать и дайте GnuPG запуститься в фоновом режиме. Большинство операционных систем получают энтропию из нескольких источников, просто перемещение мыши может оказаться недостаточным. Сделайте некоторые фактические работы, так что есть сетевой трафик, жесткий диск вращается, ..., и он скоро сможет собрать достаточно энтропии. В любом случае: какую операционную систему вы используете? –

+0

@Jens: извините, скрипт зависает после повторения и запуска 'gpg -gen-key -batch'; Я запускаю Debian stable; Я также попробовал позволить 'du /' запускать перед запуском скрипта, который определенно должен генерировать более чем достаточно энтропии, но также открывать и закрывать такие приложения, как gimp, inkscape и vbox, которые всасывают много ресурсов. Я попробую добавить параметр '% no-ask-passphrase', как вы предлагаете, и посмотреть, будут ли дела развиваться дальше или нет. – nanker

+0

@ Да, да, «% no-ask-passphrase» не оказало заметного влияния. Странно, однако, что '% echo Generating the default key' сразу же после команды gpg -batch -gen-key никогда не перекликается, возможно, указывая на проблему с помощью команды' gpg -batch -gen-key'; но на тех немногих сайтах, которые я обнаружил, мы имеем дело с автоматическим генератором ключей gpg, который, по-видимому, является тем, который использовался или предлагался. Но тогда почему gpg не возвращает ошибку, если она действительно не ждет ввода какого-либо пользователя, который затем победил бы без участия «пакетного» варианта – nanker

ответ

3

С генерацией пакетного ключа GnuPG ожидает команды создания в файле, сравните с GnuPG manual page on batch key generation.

cat <<EOT >batch-cmds 
%echo Generating a default key 
Key-Type: default 
Key-Length: 2048 
Subkey-Type: default 
Name-Real: Firstname Lastname 
Name-Comment: No comment 
Name-Email: [email protected] 
Expire-Date: 0 
Passphrase: abcde 
%pubring foo.pub 
%secring foo.sec 
# Do a commit here, so that we can later print "done" :-) 
%commit 
%echo done 
EOT 
gpg --batch --gen-key batch-cmds 

Рассмотрите вопросы безопасности, связанные с хранением паролей в файле на жестком диске. Я не уверен, что вы можете также напрямую передать содержимое в GnuPG, а не хранить их в файле. Попробуйте что-то вроде этого:

gpg --batch --gen-key <<EOT 
%echo Generating a default key 
Key-Type: default 
Key-Length: 2048 
Subkey-Type: default 
Name-Real: Firstname Lastname 
Name-Comment: No comment 
Name-Email: [email protected] 
Expire-Date: 0 
Passphrase: abcde 
%pubring foo.pub 
%secring foo.sec 
# Do a commit here, so that we can later print "done" :-) 
%commit 
%echo done 
EOT 
+0

отдельный файл с параметрами работает. Не удалось заставить параметры работать inline. – nanker

+0

Это также не описано в документах, но GnuPG, казалось, что-то ждал. По-видимому, не для ввода генерации командного ключа. –

Смежные вопросы