passwd
não lê senhas de forma não interativa, via STDIN gerado por pipe, como alternativa você pode usar chpasswd
que lê a senha via STDIN mas tem um problema de segurança.
O problema é que chpasswd
espera que as senhas sejam dadas em texto claro, seguindo o formato:
username:password
Para nos tornar um pouco menos explícitos, podemos salvar as senhas sequencialmente em linhas separadas em um arquivo correspondente à saída dada pelo comando awk -F: ' >= 1000 && != "nobody" {print }' /etc/passwd
. Lembre-se de que você precisa manter a sequência da saída do comando enquanto salva as senhas no arquivo.
Em seguida, podemos usar paste
para gerar o formato chpasswd
em seu STDIN.
Por exemplo:
paste -d: <(awk -F: ' >= 1000 && != "nobody" {print }' /etc/passwd)\
/password/file | sudo chpasswd
Aqui /password/file
contém as senhas relevantes.
Como medida de segurança, podemos remover o arquivo /password/file
depois.