-1

我正在编写一个自动化脚本来下载 aws cloud-hsm 客户端和 pcks,以便为保管库企业部署执行 aws-cloudhsm-client init-container。

目标是自动化 HSM 集成的配置和设置,以供保管库参考。

这是一份详细说明如何操作的指南。

https://github.com/jacobmammoliti/aws-vault-cloudhsm

我的问题是 cloud-hsm 客户端提供的 cloud-hsm cli 在执行更改密码命令时没有自动是功能。为了自动执行此操作,我将它放在 EOF 块中以执行内联脚本,以使用启动脚本中的 cloud-hsm cli 对其进行配置。

问题是我试图用来yes |回答提示,但我认为 EOF 内联脚本方法不支持它,我试图找到另一种解决方法,因为 cloud-hsm cli 不支持它,这有点愚蠢的。

这是我从 Kubernetes 集群内的 ubuntu:18.04 shell 运行的测试 bash 脚本,用于测试自动化。HSM 位于专用网络上,因此我使用 pod 位于 HSM 网络内。

apt update -y

apt-get install wget -y

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -ab
export PATH=~/miniconda3/bin:${PATH}

python --version

wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client_latest_u18.04_amd64.deb

wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-pkcs11_latest_u18.04_amd64.deb

apt install -y ./cloudhsm-client_latest_u18.04_amd64.deb

apt install -y ./cloudhsm-client-pkcs11_latest_u18.04_amd64.deb

export CLOUD_HSM_IP='HSM_IP'
export CUSTOMER_CA="base64encodedca"
export VAULT_DEFAULT_ADMIN_PASSWORD='password'
export VAULT_HSM_ADMIN_PASSWORD='myadminpassword'
export VAULT_USER='vault'
export VAULT_HSM_PASSWORD='myadminpassword'

echo "Configure Cloud HSM $CLOUD_HSM_IP"
/opt/cloudhsm/bin/configure -a ${CLOUD_HSM_IP}

echo "Config File"
cat /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg

echo "Echo Customer CA"
echo "${CUSTOMER_CA}" | base64 --decode > /opt/cloudhsm/etc/customerCA.crt

echo "Cat Customer CA"
cat /opt/cloudhsm/etc/customerCA.crt

echo "Execute cloudhsm cli"

echo "
yes | /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg <<'EOF'
enable_e2e
loginHSM PRECO admin ${VAULT_DEFAULT_ADMIN_PASSWORD}
changePswd PRECO admin ${VAULT_HSM_ADMIN_PASSWORD}
logoutHSM
loginHSM CO admin ${VAULT_HSM_ADMIN_PASSWORD}
createUser CU ${VAULT_USER} ${VAULT_HSM_PASSWORD}
logoutHSM
quit
EOF
" > configure_hsm

cat configure_hsm

yes | bash configure_hsm

service cloudhsm-client start

问题:

yes |由于 cloud-hsm 是其自己的 cli,因此无法解决此问题,我该如何解决?

4

1 回答 1

0

无论您使用哪个 shell,子进程都只能从一个地方接收标准输入。

任何看起来像的东西

something | binary <<eof
...
eof

基本上是一个模棱两可的重定向。应该binary从管道接收标准输入,还是从这里的文档接收标准输入?不可能两个都读。

(在 Bash 和 Alpine Linux 上的快速测试表明这些 shell 在这种情况下更喜欢这里的文档,并忽略管道。我懒得检查它是否在 POSIX 之类的地方定义。)

通过简要阅读文档,我猜您想回答y“您确定吗?” 在其中几个命令之后出现提示。只需将其添加到此处的文档中,就像所有其他输入一样。

/opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg <<'EOF'
enable_e2e
loginHSM PRECO admin ${VAULT_DEFAULT_ADMIN_PASSWORD}
changePswd PRECO admin ${VAULT_HSM_ADMIN_PASSWORD}
y
logoutHSM
loginHSM CO admin ${VAULT_HSM_ADMIN_PASSWORD}
createUser CU ${VAULT_USER} ${VAULT_HSM_PASSWORD}
y
logoutHSM
quit
EOF

对于它的价值,引用'EOF'标记将阻止 shell 扩展此处文档中的变量;我猜你可能不想要那个?

于 2021-05-27T07:31:54.460 回答