使用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是一个解包install的特殊脚本,我们手工制作的小东西就emerge 。 我删除了所有错误检查,以避免脚本并发症。

现在的问题是:我必须使用bsign签署所有的二进制文件。 我想要一个用户input一次密码,然后将其传递给bsign 。 否则,为每个软件包分别input相同的密码是一种痛苦。

不幸的是, bsign没有能力,比如sudo -S从stdin读取密码。 所以…我尝试使用socat没有任何运气。 我从socat的手册中使用这一行,没有结果:

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

bsign只是显示密码提示,好像没有社区。 input密码后,它可以工作。

我的猜测是,这是因为bsign运行gpg,然后要求密码。 socat是否可能影响gpg以及bsign

更新:我发现bsign的选项-P --passphrase-fd0这应该告诉gpg读取密码从fd 0stdin 。 明天会试试看

更新:失败, -P不起作用。 不过,这可能是由于我必须使用的一个bug(自定义修补)的bsign造成的。