eco -e

eco -e

Me gustaría establecer una contraseña para configurar sambael directorio compartido usando un script de shell. Escribí el siguiente guión test.sh:

#!/bin/bash

pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)

Esto imprime lo siguiente:

When run by root:
    smbpasswd [options] [username]
otherwise:
    smbpasswd [options]

options:
  -L                   local mode (must be first option)
  -h                   print this usage message
  -s                   use stdin for password prompt
  -c smb.conf file     Use the given path to the smb.conf file
  -D LEVEL             debug level
  -r MACHINE           remote machine
  -U USER              remote username
extra options when run by root or in local mode:
  -a                   add user
  -d                   disable user
  -e                   enable user
  -i                   interdomain trust account
  -m                   machine trust account
  -n                   set no password
  -W                   use stdin ldap admin password
  -w PASSWORD          ldap admin password
  -x                   delete user
  -R ORDER             name resolve order

Como señala, no lo estaba ejecutando como root cuando lo ejecuto como root, es decir sudo ./test.sh, funciona bien. Pero el problema es que agrega rooten lugar de noobuser, que es mi usuario que inició sesión.

¿Cómo puedo agregar noobuserhaciendo algo similar (tengo la sensación de que me falta algo aquí)?

Respuesta1

prueba.sh:

#!/bin/bash

pass=123456

if [ -z "$SUDO_USER" ]; then
    echo "This script is only allowed to run from sudo";
    exit -1;
fi

(echo "$pass"; echo "$pass") | smbpasswd -s -a "$SUDO_USER"

invocación:

sudo ./test.sh

Respuesta2

Este es un fragmento de cómo automatizo smbpasswd -amediante un script bash, funciona a las mil maravillas.

username="bob"

pass="secret"

echo -e "$pass\n$pass" | smbpasswd -a -s $username

este está extendido, inserta el nombre de usuario actual por usted. (sin awk es más corto y más limpio)

pass="secret"

echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)

.

encuentre más detalles a continuación:

.

eco -e

La opción -e se utiliza para permitir la interpretación de echo de instancias adicionales del carácter de nueva línea, así como la interpretación de otros caracteres especiales, como una pestaña horizontal, que está representada por \t.

símbolo de tubería “|”

En los sistemas operativos informáticos tipo Unix, una canalización es un mecanismo para la comunicación entre procesos mediante el paso de mensajes.

https://en.wikipedia.org/wiki/Pipeline_(Unix)

https://superuser.com/questions/756158/what-does-the-linux-pipe-symbol-do

el credito va a:lorenzoc, Wikipedia

smbcontraseña -s

La opción -s hace que smbpasswd esté en silencio (es decir, que no emita mensajes) y lea sus contraseñas antiguas y nuevas desde la entrada estándar, en lugar de desde /dev/tty (como lo hace el programa passwd(1)). Esta opción es para ayudar a las personas a escribir scripts para manejar smbpasswd.

identificación -u -n

idmuestra las identificaciones del sistema de un usuario específico.

salidas:uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

Mostrar un nombre en lugar de un UID/GID

De forma predeterminada, el comando id muestra el número para las opciones -G, -g y -u. Puede forzar que el comando id muestre el nombre del UID o GID en lugar del número para las opciones -G, -g y -u pasando la opción -n de la siguiente manera:

id -ng {UserNameHere}
id -nu {UserNameHere}
id -nG {UserNameHere}
id -nG vivek

leer más sobre id:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/

El crédito es para:Brett(solución),Casa rural Vivek(información profunda)

una pequeña pista en caso de problemas(Crédito a:Pablo):https://superuser.com/a/343163/1169381

Respuesta3

Si no desea pasar un argumento al script, puede intentar esto

#!/bin/bash

pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')

y luego invocar el script.

Respuesta4

Estoy creando un nombre de archivo smb.sh, contenido como este

#!/bin/bash

mkdir /home/user_data/$1

#add owner
chown -R $1 /home/user_data/$1
#owner only 
chmod -R 700 /home/user_data/$1


user=$1
pass=$2

#sleep 3
smbpasswd -a $user<<EOF
$pass
$pass
EOF

y puedes enviar parámetros a smb.sh así

./smb.sh myusername  mypassword

simple, puedes usar el archivo smb.sh con lenguaje PHP, usar la función PHP exec

información relacionada