2008-08-15 43 views

Répondre

35

Merci à Mark I a trouvé la réponse:

(echo newpassword; echo confirmNewPassword) | smbpasswd -s 

BTW: (écho oldpasswd echo newpasswd) | smbpasswd -s ne fonctionne pas.

+5

-1 C'est exactement la réponse de Mark, il suffit de changer les noms des variables. – JorgeeFG

+6

+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

10

Essayez quelque chose comme ceci:

(echo oldpasswd; echo newpasswd) | smbpasswd -s 
17

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

+1

ou 'echo -ne" $ PASS \ n "| tee - | smbpasswd -a -s $ LOGIN'? –

+0

smbpasswd -s signifie "utiliser stdin pour l'invite de mot de passe", pas "silencieux" – Michael

+0

@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) –

1

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'

4

Utilisez cette echo 'somepassword' | tee - | smbpasswd -s

+2

merci, fwiw c'est la seule syntaxe que je pourrais utiliser dans un Dockerfile: ' RUN PASS = myrootpassword; echo $ {PASS} | tee - | smbpasswd -a -s' – jamshid

+0

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