reprepro - Есть ли шанс ввести кодовую фразу через bash-script?

Я лично склоняюсь к udev для чего-то подобного. udev - это подсистема, которая отвечает за обработку оборудования, когда он подключен, после загрузки ядра.

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

Я уже написал, как писать простой скрипт udev, поэтому я просто укажу вас туда.

Для реальной синхронизации вам нужно что-то еще. git - очень популярное приложение для управления версиями, которое вы можете легко перекрутить по своему желанию. Существуют стандартные варианты резервного копирования, такие как rsync, что вы можете объединить конфликты (просто не так, как git).

1
задан 14 December 2014 в 10:40

1 ответ

Как упоминалось в других ответах, expect может решить эту проблему. Я закончил с чем-то вроде этого, сохранил как reprepro.exp и выполнил его с помощью chmod 755 reprepro.exp

#!/usr/bin/expect -f

set timeout 5

set passphrase "$env(SIGNING_PASSWORD)"

# Call reprepro with variable length arguments, so that this script
# takes the same arguments as the original program
spawn reprepro {*}$argv

expect {
    timeout                     {send_error "\nFailed to get password prompt\n";
                                 exit 1}
    "Please enter passphrase*"  {send -- "$passphrase\r";
                                 send_user " *** entering passphrase ***";
                                 exp_continue}
}

# Get the pid, spawnid, oserr and exitcode from the spawned reprepro command
set returnvalues [wait]

# Extract the reprepro exit code
set exitcode [lindex $returnvalues 3]

# Exit with the exitcode from reprepro (0 on success)
exit $exitcode

Наличие одного оператора expect означает, что это также будет работать (т. Е. Не сбой), если пароль неправильный. Затем gpg запросит кодовую фразу три раза, а reprepro вернет код выхода, который не равен 0.

Вы можете экспортировать переменную среды SIGNING_PASSWORD в ваш .bashrc или заменить ее в скрипте реальным пароль или сделать что-то еще. Используйте необходимый уровень безопасности.

3
ответ дан 24 May 2018 в 01:04
  • 1
    Обратите внимание, что эти тайм-ауты не будут работать повсеместно: reprepro может потребовать более 5 секунд, прежде чем запрашивать некоторую кодовую фразу. Установка тайм-аута до 30 исправила мой последний выпуск, TY! – SYN 20 May 2017 в 16:42

Другие вопросы по тегам:

Похожие вопросы: