Eu tenho muitos servidores, onde eu implemento vários binários. Para este propósito, eu uso um script que os empacota em arquivos, publica no repositório local e, em seguida, ssh-es para os servidores de destino e instala.
Por enquanto, tenho um script assim:
#!/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
aqui, install
é um script especial que descompacta e instala, nosso pequeno emerge
feito à mão. Eu removi toda a verificação de erros para evitar a complicação do script.
O problema agora é: Eu tenho que assinar todos os binários usando bsign
. Eu quero que um usuário insira uma senha uma vez e passe para bsign
. Caso contrário, é difícil inserir a mesma senha individualmente para cada um dos pacotes.
Infelizmente, bsign
não tem capacidade, como sudo -S
, de ler senhas de stdin. Então… eu tentei usar o socat sem sorte. Eu usei esta linha do manual socat
, sem resultado:
socat - EXEC:'bsign -si .',pty,setsid,ctty <<< 'My password'
bsign
apenas me mostra o prompt de senha como se não houvesse socat. Depois de digitar a senha, funciona.
Meu palpite é que é porque o bsign roda o gpg que, por sua vez, pede uma senha. É possível que socat
afete esse gpg
, bem como bsign
?
Atualização: Encontrei a opção bsign
de -P --passphrase-fd0
, que deve informar gpg
para ler a senha de fd 0
, ou seja, stdin
. Tentarei amanhã.
Atualização: com falha, -P
não funciona. Isso pode ser causado por um buggy (custom-patched) bsign
, mas tenho que usar.