我有很多服务器,我部署各种二进制文件。 为此,我使用一个脚本将其打包归档,发布到本地存储库,然后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 0
即stdin
。 明天会试试看
更新:失败, -P
不起作用。 不过,这可能是由于我必须使用的一个bug(自定义修补)的bsign
造成的。