【问题标题】:Piping password to smbpasswd管道密码到 smbpasswd
【发布时间】:2010-09-05 22:27:34
【问题描述】:

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

【问题讨论】:

    标签: automation installation debian samba


    【解决方案1】:

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

    (echo newpassword; echo confirmNewPassword) | smbpasswd -s
    

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

    【讨论】:

    • -1 这正是马克的答案,只是改变了变量名。
    • +1 抵消 JorgeeFG;如果您仔细阅读,我认为新变量名称包含区别。 Mark 的回答暗示 smbpasswd 需要一个旧密码和一个新密码,但这个答案暗示 smbpasswd 需要一个密码和一个密码确认。第二种解释是正确的,所以我觉得马克的回答没有这个有用。
    【解决方案2】:

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

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

    有回声:

    -e : 转义序列,如 \n

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

    使用 smbpasswd:

    -a : 添加新用户

    -s : 沉默

    【讨论】:

    • echo -ne "$PASS\n" | tee - | smbpasswd -a -s $LOGIN?
    • smbpasswd 的 -s 代表“使用标准输入进行密码提示”,而不是“静默”
    • @Michael 根据samba.org/samba/docs/man/manpages/smbpasswd.8.html 表示“静默”(无提示)和“从标准输入读取”(而不是 /dev/ptty)
    【解决方案3】:

    试试这样的:

    (echo oldpasswd; echo newpasswd) | smbpasswd -s
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 谢谢,这是我可以在 Dockerfile 中使用的唯一语法:RUN PASS=myrootpassword ; echo ${PASS} | tee - | smbpasswd -a -s
      • 我还发现这个答案很有用,因为它是我可以在 Puppet exec 资源中工作的唯一语法;以括号开头的方法失败了,因为 Puppet 找不到命令“(echo”。谢谢!
      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

        不幸的是,这并不可取,原因有两个: 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'

        【讨论】:

          【解决方案7】:

          使用pipelinesredirection

          【讨论】:

          • 这根本无法回答问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-23
          • 1970-01-01
          相关资源
          最近更新 更多