Descobri isso. Aqui está meu script funcional:
#!/bin/bash
ADMIN_PASS="$(cat /Users/adminuser/Documents/UpdateScript/enPass.txt)"
ADMIN_USER="adminuser"
HOST_LIST="/Users/adminuser/Desktop/hosts.txt"
for HOST in $(< $HOST_LIST); do
echo ""
echo "--------------------------------"
echo "# CONNECTING TO: $HOST #"
echo "--------------------------------"
echo ""
ssh -tt $ADMIN_USER@$HOST << ENDSSH
echo 'Connected to host!'
echo $ADMIN_PASS | base64 -d | sudo -S /usr/local/munki/managedsoftwareupdate -v --auto
echo 'Finished Munki Update!'
echo $ADMIN_PASS | base64 -d | sudo -S softwareupdate -ia
echo 'Finished Apple Software Update!'
echo $ADMIN_PASS | base64 -d | sudo -S shutdown -r now
logout
ENDSSH
echo ""
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "~~ Update script completed successfully on $HOST ~~"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo ""
done
A passagem explícita da variável $ADMIN_PASS
para cada comando que eu queria executar parece funcionar bem. Eu supus que, como isso seria executado em um Mac remoto, a variável $ADMIN_PASS
local não funcionaria. Eu continuarei mexendo com isso, já que não gosto do fato de que ele exibe em destaque o valor em enPass.txt toda vez que echo $ADMIN_PASS
é usado. Esperava que essa sintaxe a enviasse para o comando base64 -d
e a mantivesse fora da janela do Terminal.
Isso funciona bem. Se alguém tiver sugestões, me avise. Também estou curioso para saber o quão seguro é esse script. Se meu cérebro está funcionando corretamente, acho que a senha criptografada está sendo enviada para o sistema cliente, e ENTÃO é descriptografada antes de ser usada nos comandos sudo -S
.