2008-08-15 14 views

ответ

35

Благодаря Марку я нашел ответ:

(echo newpassword; echo confirmNewPassword) | smbpasswd -s 

BTW: (эхо oldpasswd; эхо newpasswd) | smbpasswd -s не работает.

+5

-1 Это точно ответ Марка, просто меняя имена переменных. – JorgeeFG

+6

+1 для компенсации JorgeeFG; Я думаю, что новые имена переменных содержат различие, если вы внимательно прочитаете. Ответ Марка подразумевает, что smbpasswd ожидает старый пароль и новый, но этот ответ подразумевает, что smbpasswd ожидает пароль и подтверждение пароля. Вторая интерпретация является правильной, и поэтому я чувствую, что ответ Марка менее полезен, чем этот. – Matt

10

попробовать что-то вроде этого:

(echo oldpasswd; echo newpasswd) | smbpasswd -s 
17

Я использую следующие в одном из моих сценариев:

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

С эхо:

-e: управляющие последовательности, как \ п

-n: не добавляйте неявный символ новой строки в конце

С smbpasswd:

-a: добавить нового пользователя

-s: бесшумные

+1

или 'echo -ne" $ PASS \ n "| tee - | smbpasswd -a -s $ LOGIN'? –

+0

smbpasswd's -s означает «использовать stdin для запроса пароля», а не «silent» – Michael

+0

@Michael в соответствии с https://www.samba.org/samba/docs/man/manpages/smbpasswd.8.html это означает, что оба " (без подсказок) и «читать из stdin» (вместо/dev/ptty) –

1

К сожалению, это не желательно по двум причинам: 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 # @ (& * (_ \ n895'

4

Используйте этот echo 'somepassword' | tee - | smbpasswd -s

+2

спасибо, fwiw это единственный синтаксис, который я мог бы получить в файле Docker: 'RUN PASS = myrootpassword; echo $ {PASS} | tee - | smbpasswd -a -s' – jamshid

+0

Я также нашел этот ответ полезным как единственный синтаксис, который я мог бы получить в ресурсе exec Puppet; подход, начинающийся с paren, не удался, потому что Puppet не смог найти команду «(эхо». Спасибо! – dbrewer

 Смежные вопросы

  • Нет связанных вопросов^_^