Reputation: 90951
How can I pipe the new password to smbpasswd so I can automate my installation process.
Upvotes: 37
Views: 36775
Reputation: 2027
You don't need to use smbpasswd
. You can take your new password and calculate its NT hash (encode with UTF-16-LE and calculate the MD4 digest), encode it as a hexadecimal string, and then run pdbedit -u USER --set-nt-hash=HASH
.
Upvotes: 0
Reputation: 21
I had to create a new Samba user in a Puppet 5.x Exec resource and for various reasons none of the above worked. Fortunately this rather silly-looking command worked:
yes vagrant|head -n 2|smbpasswd -a -s vagrant
Password here is of course "vagrant".
Upvotes: 2
Reputation: 21
This unfortunately is not desirable for two reasons: 1) if the user uses a combination of '\n' in the password there will be a mismatch in the input 2) if there are unix users on the system, then a user using the utility ps may see the password
A better way would be to put the names in a file and read from the file and use python pexpect to read them, not like below, but the simple script is enough to see how to use 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)
then try: ./smbpasswd.py userName1 'f#@(&*(_\n895'
Upvotes: 2
Reputation: 47366
I use the following in one of my scripts:
echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN
With echo:
-e : escape sequences, like \n
-n : don't add implicit newline at end
With smbpasswd:
-a : add new user
-s : silent
Upvotes: 28
Reputation: 90951
Thanks to Mark I found the answer:
(echo newpassword; echo confirmNewPassword) | smbpasswd -s
BTW: (echo oldpasswd; echo newpasswd) | smbpasswd -s does not work.
Upvotes: 52
Reputation: 304664
Try something like this:
(echo oldpasswd; echo newpasswd) | smbpasswd -s
Upvotes: 13