33

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

4

7 回答 7

50

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

(echo newpassword; echo confirmNewPassword) | smbpasswd -s

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

于 2008-08-15T06:38:59.287 回答
27

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

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

有回声:

-e : 转义序列,如 \n

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

使用 smbpasswd:

-a : 添加新用户

-s:沉默

于 2008-09-15T13:20:38.980 回答
13

尝试这样的事情:

(echo oldpasswd; echo newpasswd) | smbpasswd -s
于 2008-08-15T06:31:29.427 回答
4

用这个 echo 'somepassword' | tee - | smbpasswd -s

于 2013-11-04T14:47:40.153 回答
2

我不得不在 Puppet 5.x Exec 资源中创建一个新的 Samba 用户,但由于各种原因,上述方法都不起作用。幸运的是,这个看起来很傻的命令奏效了:

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

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

于 2018-11-22T09:56:05.690 回答
1

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

更好的方法是将名称放在文件中并从文件中读取并使用 python pexpect 读取它们,不像下面那样,但简单的脚本足以了解如何使用 pexpect

#!/usr/bin/python
#converted from: http://pexpect.sourceforge.net/pexpect.html
#child = pexpect.spawn('scp foo myname@host.example.com:.')
#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#@(&*(_\n895'

于 2013-04-05T18:37:29.983 回答
-4

使用管道重定向

于 2008-08-15T06:16:12.187 回答