将密码通过管道传输到 smbpasswd

问题描述 投票:0回答:8

如何将新密码通过管道传输到 smbpasswd,以便我可以自动化安装过程。

automation installation debian samba
8个回答
52
投票

感谢马克,我找到了答案:

(echo newpassword; echo confirmNewPassword) | smbpasswd -s

顺便说一句:(回显旧密码;回显新密码)| smbpasswd -s 不起作用。


28
投票

我在我的一个脚本中使用以下内容:

   echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN

有回声:

-e :转义序列,例如

-n :不要在末尾添加隐式换行符

使用 smbpasswd:

-a:添加新用户

-s:沉默


13
投票

尝试这样的事情:

(echo oldpasswd; echo newpasswd) | smbpasswd -s

5
投票

用这个

echo 'somepassword' | tee - | smbpasswd -s


2
投票

不幸的是,这并不可取,原因有两个: 1) 如果用户使用 ' 的组合 ' 在密码中输入将不匹配 2)如果系统上有unix用户,那么使用实用程序ps的用户可能会看到密码

更好的方法是将名称放入文件中并从文件中读取并使用 python pexpect 来读取它们,而不是像下面这样,但是简单的脚本足以了解如何使用 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)

然后尝试: ./smbpasswd.py userName1 'f#@(&*(_ 895'


2
投票

我必须在 Puppet 5.x Exec 资源中创建一个新的 Samba 用户,但由于各种原因,上述方法均不起作用。幸运的是,这个看起来相当愚蠢的命令起作用了:

yes vagrant|head -n 2|smbpasswd -a -s vagrant

这里的密码当然是“vagrant”。


0
投票

您不需要使用

smbpasswd
。您可以获取新密码并计算其 NT 哈希(使用 UTF-16-LE 编码并计算 MD4 摘要),将其编码为十六进制字符串,然后运行
pdbedit -u USER --set-nt-hash=HASH


-4
投票

使用管道重定向

© www.soinside.com 2019 - 2024. All rights reserved.