J'ai essayé de créer un utilisateur avec mot de passe via ssh (avec l'autorisation root) comme ceci:
ssh [email protected] useradd -p $(openssl passwd -1 1234) newuser
Ce faisant, j'ai réussi à créer un compte nommé newuser
, mais je n'ai pas pu me connecter avec le mot de passe attendu (qui est 1234
)
Cela ne fait aucune différence si j'ajoute des guillemets doubles:
ssh [email protected] "useradd -p $(openssl passwd -1 1234) newuser"
Et puis je me demandais si je pouvais générer un mot de passe haché et l'enregistrer en tant que variable localement, mais toujours sans succès.
password=$(openssl passwd -1 1234)
ssh [email protected] "useradd -p $password newuser"
Y a-t-il quelque chose qui me manque? Merci d'avance!
command-line
ssh
password
users
amigcamel
la source
la source
Réponses:
Il s'agit d'un problème de citation classique.
Problème: sans aucun guillemet ou double guillemet, la substitution de commande (
$()
) et l'expansion de variable (les$
s du mot de passe haché renvoyé paropenssl
sont traités comme un indicateur de variable) sont effectués dans l'environnement local, pas sur le shell distant.Solution: utilisez des guillemets simples autour de la
useradd
commande utilisée avecssh
sur le shell local pour empêcher la substitution de commandes et l'expansion des variables sur l'environnement local, laissez les extensions se dérouler sur le shell distant sans connexion et non interactif:Notez les citations.
Les problèmes de sécurité:
La
root
connexion SSH doit être désactivée, si vous devez l'avoir activée, seule l'authentification par clé doit être autoriséeMD5 est déjà cassé, et sans sel, vous êtes soumis à une simple attaque de table Rainbow (n'a même pas besoin de forçage brutal / d'attaque par dictionnaire);
openssl passwd
ne génère cependant un sel aléatoire. Quoi qu'il en soit, vous devriez vraiment envisager d'utiliser SHA-2 avec du selLes mots de passe transmis comme arguments aux commandes peuvent être visibles par d'autres processus du système (distant); cela dépend de la façon dont votre
procfs
est monté (regardezhidepid
), et si la commande se réécrit elle-même (ce cas, probablement pas)la source
crypt(3)
sous Linux et marqué avec l'$1$
identifiant n'est pas le même que l'algorithme de hachage MD5 ordinaire, de la même manière que les hachages de mot de passe$5$
et ne sont pas non plus SHA-256 et SHA-512 non plus . La méthode basée sur MD5 a un nombre fixe d'itérations, ce qui est le plus gros problème.$6$
Comme l'a noté @heemayl, l'algorithme de hachage de mot de passe MD5 est vieilli, et les systèmes actuels les nouveaux hachages de mot de passe basés sur SHA-2, qui ont un facteur de travail personnalisable. Mais l'outil de ligne de commande OpenSSL ne semble pas les prendre en charge.
L'
chpasswd
utilitaire , cependant, vous permettra de changer le mot de passe d'un utilisateur en fonction des paramètres du système.Cela devrait vous permettre de créer le nouvel utilisateur et de modifier son mot de passe sur l'extrémité distante.
chpasswd
prend le nom d'utilisateur et le mot de passe de stdin, pas la ligne de commande. C'est en fait un avantage car les arguments de ligne de commande sont visibles pour tous les autres processus du système, donc s'il est exécutéopenssl passwd
sur la télécommande, le mot de passe sera momentanément visible par tous les processus du système.Je ne sais pas s'il existe un utilitaire de ligne de commande prêt à l'emploi pour générer des hachages de mot de passe connus par la
crypt(3)
fonction système . Perl a lacrypt
fonction intégrée, mais un sel approprié devrait encore être généré.la source