passwd funciona para este caso. Tem uma opção --stdin . Não use echo my-secret-password | passwd --stdin , porque echo my-secret-password pode se tornar visível se alguém executar ps , ou talvez até mesmo em um arquivo de log, se você não tiver sorte.
#!/bin/sh
PASSWORD=...
passwd root --stdin <<EOF
$PASSWORD
EOF