7 ответов

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

    (echo newpassword; echo confirmNewPassword) | smbpasswd -s
    

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

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

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

    С отголосками:

    — e : escape-последовательности, например \n

    — n : не добавляйте неявную новую строку в конце

    С smbpasswd:

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

    — s: silent

  3. Это, к сожалению, нежелательно по двум причинам:
    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’

  4. Мне пришлось создать нового пользователя Samba в Puppet 5.X Exec resource и по разным причинам ничего из вышеперечисленного не сработало. К счастью, эта довольно глупо выглядящая команда сработала:

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

    Пароль вот конечно «бродяга».