Seu código deve estar seguro, pois echo
não aparecerá na tabela de processos, já que é um shell embutido.
Aqui está uma solução alternativa:
#!/bin/bash
n=20
paste -d : <( seq -f 'student%.0f' 1 "$n" ) \
<( tr -cd 'A-Za-z0-9' </dev/urandom | fold -w 13 | head -n "$n" ) |
tee secret.txt | chpasswd
Isso cria os nomes e senhas de seus alunos, n
deles, sem passar nenhuma senha em qualquer linha de comando de qualquer comando.
O utilitário paste
cole vários arquivos como colunas e insere um delimitador entre eles. Aqui, usamos :
como o delimitador e fornecemos dois "arquivos" (substituições de processo). O primeiro contém a saída de um comando seq
que cria 20 nomes de usuários e o segundo contém a saída de um pipeline que cria 20 strings aleatórias de comprimento 13.
Se você tiver um arquivo com nomes de usuário já gerados:
#!/bin/bash
n=$(wc -l <usernames.txt)
paste -d : usernames.txt \
<( tr -cd 'A-Za-z0-9' </dev/urandom | fold -w 13 | head -n "$n" ) |
tee secret.txt | chpasswd
Isso salvará as senhas e nomes de usuários no arquivo secret.txt
em vez de mostrar as senhas geradas no terminal.