Isso deve ser feito:
for i in {1..5}; do
printf '#%s/Z\n' "$(openssl rand -hex 4)"
done >passwords.txt
Substitui as várias chamadas para eco com uma única chamada para printf. Ter a chamada para o openssl dentro de um comando substituição tem o efeito colateral de fazer desaparecer a linha, e esse caractere de nova linha foi a causa das quebras de linha mal posicionadas visível no seu exemplo.