Как передать новый пароль в smbpasswd, чтобы автоматизировать процесс установки?

используя трубопроводы или перенаправление.
Попробуйте что-то вроде этого:
(echo oldpasswd; echo newpasswd) | smbpasswd -s
Благодаря Марку я нашел ответ:
(echo newpassword; echo confirmNewPassword) | smbpasswd -s
Кстати: (эхо oldpasswd; эхо newpasswd) | smbpasswd -s не работает.
-1 Это как раз и есть ответ Марка, просто меняя имена переменных.
+1 для компенсации JorgeeFG; Я думаю, что новые имена переменных содержат различие, если вы внимательно прочитаете. Ответ Марка подразумевает, что smbpasswd ожидает старый пароль и новый, но этот ответ подразумевает, что smbpasswd ожидает пароль и подтверждение пароля. Вторая интерпретация верна, и поэтому я считаю, что ответ Марка менее полезен, чем этот.
В одном из своих скриптов я использую следующее:
echo -ne "$PASS\n$PASS\n" | smbpasswd -a -s $LOGIN
С эхом:
-e: escape-последовательности, например \ n
-n: не добавлять неявную новую строку в конец
С помощью smbpasswd:
-a: добавить нового пользователя
-s: тихий
или echo -ne "$PASS\n" | tee - | smbpasswd -a -s $LOGIN?
-s от smbpasswd означает «использовать стандартный ввод для запроса пароля», а не «без звука».
@Michael согласно samba.org/samba/docs/man/manpages/smbpasswd.8.html означает как "тихий" (без подсказок), так и "чтение из стандартного ввода" (вместо / dev / ptty)
К сожалению, это нежелательно по двум причинам: 1) если пользователь использует комбинацию '\ n' в пароле, во вводе будет несоответствие 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 # @ (& * (_ \ n895'
Использовать это
echo 'somepassword' | tee - | smbpasswd -s
спасибо, fwiw, это единственный синтаксис, с которым я мог работать в Dockerfile: RUN PASS=myrootpassword ; echo ${PASS} | tee - | smbpasswd -a -s
Я также нашел этот ответ полезным как единственный синтаксис, с которым я мог работать в ресурсе Puppet exec; подход, начинающийся с парена, не удался, потому что Puppet не смог найти команду "(echo". Спасибо!
Мне пришлось создать нового пользователя Samba в ресурсе Puppet 5.x Exec, и по разным причинам ничего из вышеперечисленного не помогло. К счастью, эта довольно глупо выглядящая команда сработала:
yes vagrant|head -n 2|smbpasswd -a -s vagrant
Пароль здесь конечно же "бродячий".
Это просто не отвечает на вопрос.