Imansible creare un utente con password tramite ssh

Ho provato a creare un utente con password tramite ssh (con permesso di root) come questo:

ssh [email protected] useradd -p $(openssl passwd -1 1234) newuser 

Così facendo, ho potuto creare con successo un account chiamato newuser , ma non sono riuscito ad accedere con la password prevista (che è 1234 )

Non fa differenza se aggiungo virgolette doppie:

 ssh [email protected] "useradd -p $(openssl passwd -1 1234) newuser" 

E poi mi chiedevo se posso generare password hash e salvarlo come variabile localmente, ma ancora senza fortuna.

 password=$(openssl passwd -1 1234) ssh [email protected] "useradd -p $password newuser" 

C’è qualcosa che mi manca? Grazie in anticipo!

    Questo è un classico problema di quotazione.

    Problema: senza virgolette o virgolette la sostituzione del comando ( $() ) e l’espansione della variabile (i $ s nella password hash restituita da openssl vengono trattati come indicatori variabili) vengono eseguiti nell’ambiente locale, non nella shell remota .

    Soluzione: utilizzare le virgolette singole attorno al comando useradd utilizzato con ssh sulla shell locale per impedire la sostituzione del comando e l’espansione della variabile sull’ambiente locale, lasciare che le espansioni avvengano nella shell non intertriggers di accesso non intertriggers:

     ssh [email protected] 'useradd -p "$(openssl passwd -1 1234)" newuser' 

    Nota le citazioni.

    Problemi di sicurezza:

    • Il login root SSH deve essere disabilitato, se è necessario abilitare l’accesso solo l’autenticazione basata su chiave deve essere consentita

    • MD5 è già rotto, e senza sale sei sobject a un semplice attacco da tavolo arcobaleno (non serve nemmeno un attacco di forza bruta / attacco dizionario); openssl passwd genera comunque un sale casuale. Ad ogni modo, dovresti prendere in considerazione l’utilizzo di SHA-2 con il sale

    • Le password passate come argomenti ai comandi potrebbero essere visibili ad altri processi nel sistema (remoto); questo dipende da come viene montato il procfs (guarda hidepid ), e se il comando si riscrive da solo (in questo caso presumibilmente no)

    Come ha notato @emayl, l’algoritmo hash della password MD5 è invecchiato e i sistemi attuali sono gli hash delle password basati su SHA-2 più recenti, che hanno un fattore di lavoro personalizzabile. Ma lo strumento da riga di comando OpenSSL non sembra supportare quelli.

    L’utilità chpasswd , tuttavia, ti consentirà di modificare la password di un utente in base alle impostazioni di sistema.

    Questo dovrebbe consentire di creare il nuovo utente e cambiare la password sul terminale remoto.

     echo "newuser:newpass" | ssh [email protected] 'useradd newuser; chpasswd' 

    chpasswd accetta nome utente e password da stdin, non dalla riga di comando. Questo è in realtà un vantaggio poiché gli argomenti della riga di comando sono visibili per tutti gli altri processi sul sistema, quindi se esegui openssl passwd sul telecomando, la password sarebbe momentaneamente visibile a tutti i processi sul sistema.

    Non sono sicuro se esiste un’utilità da riga di comando già pronta per generare gli hash delle password conosciuti dalla funzione crypt(3) system crypt(3) . Perl ha la funzione crypt integrata , ma dovrebbe essere ancora generato un sale corretto.