Automation 将密码传递到smbpasswd

Automation 将密码传递到smbpasswd,automation,installation,debian,samba,Automation,Installation,Debian,Samba,如何将新密码传送到smbpasswd,以便自动化安装过程。使用或。尝试以下方法: (echo oldpasswd; echo newpasswd) | smbpasswd -s 多亏了马克,我找到了答案: (echo newpassword; echo confirmNewPassword) | smbpasswd -s 顺便说一句:(echo oldpasswd;echo newpasswd)| smbpasswd-s不起作用。我在我的一个脚本中使用了以下内容: echo -ne "

如何将新密码传送到smbpasswd,以便自动化安装过程。

使用或。

尝试以下方法:

(echo oldpasswd; echo newpasswd) | smbpasswd -s

多亏了马克,我找到了答案:

(echo newpassword; echo confirmNewPassword) | smbpasswd -s

顺便说一句:(echo oldpasswd;echo newpasswd)| smbpasswd-s不起作用。

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

   echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN
与回声:

-e:转义序列,如\n

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

使用smbpasswd:

-a:添加新用户


-s:silent

不幸的是,由于两个原因,这是不可取的: 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#@(&*(\un895')

使用此选项
echo'somepassword'| tee-| smbpasswd-s

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

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

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

echo-ne“$PASS\n”| tee-| smbpasswd-a-s$LOGIN
?smbpasswd的-s代表“使用stdin进行密码提示”,而不是“silent”@Michael,因为它意味着“沉默”(无提示)和“从stdin读取”(而不是/dev/pty)-1这正是Mark的答案,只是更改了变量名。+1抵消了JorgeeFG;如果仔细阅读,我认为新的变量名包含一个区别。Mark的答案意味着smbpasswd需要一个旧密码和一个新密码,但这个答案意味着smbpasswd需要一个密码和一个密码确认第二种解释是正确的,因此我觉得Mark的答案没有这一种有用。谢谢,fwiw这是我在Dockerfile中可以使用的唯一语法:
RUN PASS=myrootpassword;echo${PASS}| tee-|smbpasswd-a-s
我还发现这个答案很有用,因为这是我在Puppet exec资源中可以使用的唯一语法;以paren开头的方法失败了,因为Puppet找不到命令“(echo)。谢谢!这根本不能回答问题。