Comment puis-je rediriger le nouveau mot de passe vers smbpasswd afin de pouvoir automatiser mon processus d'installation.Tuyauterie mot de passe pour smbpasswd
Répondre
Merci à Mark I a trouvé la réponse:
(echo newpassword; echo confirmNewPassword) | smbpasswd -s
BTW: (écho oldpasswd echo newpasswd) | smbpasswd -s ne fonctionne pas.
Essayez quelque chose comme ceci:
(echo oldpasswd; echo newpasswd) | smbpasswd -s
J'utilise ce qui suit dans l'un de mes scripts:
echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN
Avec écho:
-e: séquences d'échappement, comme \ n
-n: ne pas ajouter de nouvelle ligne implicite à la fin
Avec smbpasswd:
-a: ajouter un nouvel utilisateur
-s: silencieux
ou 'echo -ne" $ PASS \ n "| tee - | smbpasswd -a -s $ LOGIN'? –
smbpasswd -s signifie "utiliser stdin pour l'invite de mot de passe", pas "silencieux" – Michael
@Michael selon https://www.samba.org/samba/docs/man/manpages/smbpasswd.8.html cela signifie à la fois " silent "(sans invite) et" read from stdin "(au lieu de/dev/ptty) –
C'est malheureusement pas souhaitable pour deux raisons: 1) si l'utilisateur utilise une combinaison de « \ n » dans le mot de passe, il y aura un décalage dans l'entrée 2) il y a des utilisateurs unix sur le système, puis un utilisateur utilisant l'utilitaire ps peut voir le mot de passe
Une meilleure façon serait de mettre les noms dans un fichier et lire dans le fichier et utiliser python pexpect pour les lire, pas comme ci-dessous, mais le script simple est suffisant pour voir comment utiliser pexpect
#!/usr/bin/python
#converted from: http://pexpect.sourceforge.net/pexpect.html
#child = pexpect.spawn('scp foo [email protected]:.')
#child.expect ('Password:')
#child.sendline (mypassword)
import pexpect
import sys
user=sys.argv[1]
passwd=sys.argv[2]
child = pexpect.spawn('/usr/bin/smbpasswd -a '+str(user))
child.expect('New SMB password:')
child.sendline (passwd)
child.expect ('Retype new SMB password:')
child.sendline (passwd)
essayez: ./smbpasswd.py USERNAME1 'f @ # (& * (_ \ n895'
Utilisez cette echo 'somepassword' | tee - | smbpasswd -s
merci, fwiw c'est la seule syntaxe que je pourrais utiliser dans un Dockerfile: ' RUN PASS = myrootpassword; echo $ {PASS} | tee - | smbpasswd -a -s' – jamshid
J'ai aussi trouvé cette réponse utile en tant que seule syntaxe que je pourrais utiliser dans une ressource d'exécution Puppet; l'approche commençant par un parent a échoué parce que Puppet n'a pas pu trouver la commande "(echo". – dbrewer
-1 C'est exactement la réponse de Mark, il suffit de changer les noms des variables. – JorgeeFG
+1 pour compenser JorgeeFG; Je pense que les nouveaux noms de variables contiennent une distinction, si vous lisez attentivement. La réponse de Mark implique que smbpasswd attend un ancien mot de passe et un nouveau mot de passe, mais cette réponse implique que smbpasswd attend un mot de passe et une confirmation de mot de passe. La deuxième interprétation est la bonne, et je pense que la réponse de Mark est moins utile que celle-ci. – Matt