reprepro - Там шанс состоит в том, чтобы ввести пароль с помощью сценария удара?

Я использую "reprepro" для того, чтобы вытащить последние пакеты Debian из моего локального репозитория, который хорошо работает вручную.
Теперь я должен автоматизировать этот процесс через задание крона, но reprepro пароль является подсказкой.

Там возможность состоит в том, чтобы отправить пароль с помощью сценария удара? Ничего не мог найти в reprepro странице справочника.

2
задан 13 December 2014 в 23:40

3 ответа

Я нуждался в том же самом и искал решение. Кроме выполнения gpg-agent, который будет просить пароль только однажды (например, во время начальной загрузки) и кэшировать его для следующего использования, я ничего не нашел.

Проблема состоит в том, как взаимодействовать с интерактивными сценариями, которые являются теми, кто просит ввод данных пользователем от stdin. Ожидайте (apt-get install expect) решает точно это.

Это - сценарий, который я записал и сохранил в/usr/local/bin/reprepro_expect:

#!/usr/bin/expect -f
set timeout 2
set passphrase "mysupersecretpassword"

spawn reprepro -b [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3]
expect {
        "*passphrase:*" {
                send -- "$passphrase\r"
        }
}
expect {
        "*passphrase:*" {
                send -- "$passphrase\r"
        }
}
interact

Можно выполнить его как это:

reprepro_expect [path_to_repository] [command] [distribution] [package_name]

Например:

Добавьте новый пакет:

reprepro_expect /var/www/myrepo includedeb wheezy mypackage_0.1-1_all.deb

Удалите пакет

reprepro_expect /var/www/myrepo remove wheezy mypackage

Безопасность: Так как пароль к Вашему закрытому ключу хранится в сценарии, я рекомендую chown это пользователю, при котором это будет использоваться и chmod это к 500. Почему пароль не передается как другой аргумент? Поскольку это было бы сохранено в ~/.bash_history, и это покажет в ps axu во время времени выполнения.

5
ответ дан 2 December 2019 в 01:33

Как упомянуто в других ответах, 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
ответ дан 19 November 2019 в 00:47

Этот ответ предназначен для пользователей Ansible.
У меня была та же проблема, я создал фиктивный файл, зашифровал его и использовал gpg-agent для кэширования пароля, как это было предложено mkudlacek, но с модулем ожидания. Я использовал следующие задачи:

- name: create test.txt, created a dummy file
  file:
    path: /test.txt
    state: touch
    mode: u=rw,g=rw,o=rw #!!! just for testing purposes

 - name: encrypt file
   expect:
     command: gpg --pinentry-mode loopback --sign /test.txt
     responses: 'Enter passphrase:': '{{ your_pw }}'
     timeout: 60

Теперь вы можете добавить пакеты Reprepro через отдельную задачу и удалить файл test.txt.

0
ответ дан 22 September 2020 в 10:20

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

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