Назад | Перейти на главную страницу

используйте socat, чтобы указать пароль для bsign

У меня много серверов, на которых я разворачиваю различные бинарные файлы. Для этой цели я использую сценарий, который упаковывает их в архивы, публикует в локальном репозитории, а затем ssh-es на целевые серверы и устанавливает.

На данный момент у меня есть сценарий, который выглядит так:

#!/bin/bash
packs=(app1 app2 app3 great_app main_server and_so_on)
for pack in ${packs[@]}; do
    cd "$pack"
    svn up
    make redist-package
    SERVER="$(cat ./server)"
    ssh "$SERVER" <<< "wget 'http://dev-server/$pack'; install './$pack'" # ssh uses keys to authenticate
    cd - &>/dev/null
done

Вот, install это специальный скрипт, который распаковывает и устанавливает наши маленькие emerge. Я удалил все проверки на ошибки, чтобы не усложнять скрипт.

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

К сожалению, bsign не имеет таких способностей, как sudo -S читать пароли со стандартного ввода. Итак ... Я безуспешно пытался использовать socat. Я использовал эту строку из socatруководство, без результата:

socat - EXEC:'bsign -si .',pty,setsid,ctty <<< 'My password'

bsign просто показывает мне запрос пароля, как если бы не было socat. После ввода пароля все работает.

Я предполагаю, что это потому, что bsign запускает gpg, который, в свою очередь, запрашивает пароль. Возможно ли socat повлиять на это gpg так же как bsign?

Обновить: я нашел bsignвариант -P --passphrase-fd0 что должно сказать gpg читать пароль от fd 0 т.е. stdin. Завтра попробую.

Обновить: Не смогли, -P не работает. Это может быть вызвано ошибкой (исправленной) bsign Хотя я должен использовать.