2008-08-15 21 views

Respuesta

35

Gracias a Mark I encontró la respuesta:

(echo newpassword; echo confirmNewPassword) | smbpasswd -s 

Por cierto: (eco oldpasswd; eco newpasswd) | smbpasswd -s no funciona.

+5

-1 Esta es exactamente la respuesta de Mark, simplemente cambiando los nombres de las variables. – JorgeeFG

+6

+1 para compensar JorgeeFG; Creo que los nuevos nombres de variables contienen una distinción, si lees con atención. La respuesta de Mark implica que smbpasswd espera una contraseña anterior y una nueva, pero esta respuesta implica que smbpasswd espera una contraseña y una confirmación de contraseña. La segunda interpretación es la correcta, por lo que siento que la respuesta de Mark es menos útil que esta. – Matt

10

intentar algo como esto:

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

utilizo el siguiente en uno de mis guiones:

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

Con eco:

-e: secuencias de escape, como \ n

-n: no agregue nueva línea implícita al final

Con smbpasswd:

-a: añadir nuevo usuario

-s: silencioso

+1

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

+0

smbpasswd's -s significa "use stdin para contraseña", no "silencioso" – Michael

+0

@Michael según https://www.samba.org/samba/docs/man/manpages/smbpasswd.8.html significa ambos " silent "(sin indicaciones) y" read from stdin "(en lugar de/dev/ptty) –

1

Esto, desafortunadamente, no es deseable por dos razones: 1) Si el usuario utiliza una combinación de '\ n' en la contraseña habrá una falta de coincidencia en la entrada 2) si hay usuarios de Unix en el sistema, entonces un usuario que use la utilidad ps puede ver la contraseña

Una mejor manera sería poner los nombres en un archivo y leer del archivo y usar python pexpect para leerlos, no como a continuación, pero la secuencia de comandos simple es suficiente para ver cómo usar 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) 

luego tratar: ./smbpasswd.py UserName1 'f @ # (* & (_ \ n895'

4

Utilice esta echo 'somepassword' | tee - | smbpasswd -s

+2

gracias, esa es la única sintaxis que podría funcionar en un Dockerfile: ' RUN PASS = myrootpassword; echo $ {PASS} | tee - | smbpasswd -a -s' – jamshid

+0

También encontré esta respuesta útil como la única sintaxis que podría obtener trabajando en un recurso ejecutivo de Puppet; el enfoque que comenzaba con una paren fracasó porque Puppet no pudo encontrar el comando "(echo). ¡Gracias! – dbrewer