У меня много серверов, на которых я разворачиваю различные бинарные файлы. Для этой цели я использую сценарий, который упаковывает их в архивы, публикует в локальном репозитории, а затем 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
Хотя я должен использовать.