Ci sono vari sistemi...

io se vuoi posso suggerirti la cowboy way (da linea di comando).

Il trucco è usare il device /dev/random (o /dev/urandom) che è un generatore di numeri casuali, per estrarre codici ASCII di caratteri alfanumerici.

Si usa dd per creare lo "stream" generatore di codici, e poi i programmi tr (translate) e cut (taglia) per "estrarre" i caratteri ASCII, mediante l'uso di pipe.

Primo passo: creare lo stream generatore
Codice:
dd if=/dev/urandom count=200 bs=1 > foo.txt
dd genera uno stream di 200 (count) blocchi di 1 byte (bs = 1), e lo scrive nel file foo.txt

Secondo passo... bisogna eliminare i caratteri di "a capo" e si usa tr

Codice:
dd if=/dev/urandom count=200 bs=1 | tr "\n" " " > foo.txt
in questo caso l'aggiunta tramite pipe del comando tr serve a sostituire tutti gli "a capo" con degli spazi vuoti.

terzo passo: trasformare lo stream di numeri casuali in caratteri alfanumerici utilizzando sed (stream editor). Si invoca sed per eliminare tutti i caratteri non alfanumerici
Codice:
dd if=/dev/urandom count=200 bs=1 | tr "\n" " " | sed 's/[^a-zA-Z0-9]//g'> foo.txt
qui sed è istruito perchè agisca globalmente e ricorsivamente (l'opzione g alla fine) per eliminare tutti i caratteri che non siano alfabetici (sia maiuscoli che minuscoli) o numerici.

Infine è possibile estrarre dallo stream una password di dimensione voluta tramite il comando cut.
Codice:
dd if=/dev/urandom count=200 bs=1 | tr "\n" " " | sed 's/[^a-zA-Z0-9]//g' | cut -c-8> foo.txt
in questo caso cut taglia 8 caratteri dallo stream e li mette in foo.txt

Se si volesse visualizzare a schermo la password generata senza passare dal file foo.txt si può sempre omettere l'ultimo comando:
Codice:
dd if=/dev/urandom count=200 bs=1 | tr "\n" " " | sed 's/[^a-zA-Z0-9]//g' | cut -c-8
Un metodo alternativo sarebbe quello di usare md5sum (che serve appunto a generare stream alfanumerici secondo lo standard md5 al posto di tr e sed

Codice:
dd if=/dev/urandom count=200 bs=1 | md5sum | cut -c-8
Spero di esserti stato utile...