eco -e

eco -e

Gostaria de definir uma senha para configurar sambao diretório de compartilhamento usando um script de shell. Eu escrevi o seguinte script test.sh:

#!/bin/bash

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

Isso imprime o seguinte:

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 aponta, eu não estava rodando como root, quando executo como root, ou seja sudo ./test.sh, ele roda bem. Mas o problema é que ele adiciona rootem vez de noobuser, que é meu usuário logado.

Como posso adicionar noobuserfazendo algo semelhante (tenho a sensação de que estou faltando alguma coisa aqui)?

Responder1

teste.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"

invocação:

sudo ./test.sh

Responder2

Este é um fragmento de como eu automatizo smbpasswd -avia script bash, funciona perfeitamente.

username="bob"

pass="secret"

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

este é estendido, insere o nome de usuário atual para você. (sem awk é mais curto e mais limpo)

pass="secret"

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

.

encontre mais detalhes abaixo:

.

eco -e

A opção -e é usada para permitir a interpretação do echo de instâncias adicionais do caractere de nova linha, bem como a interpretação de outros caracteres especiais, como uma tabulação horizontal, que é representada por \t.

símbolo de barra vertical “|”

Em sistemas operacionais de computador do tipo Unix, um pipeline é um mecanismo para comunicação entre processos usando passagem de mensagens.

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

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

o crédito vai para:LawrenceC, Wikipédia

smbpasswd -s

A opção -s faz com que o smbpasswd fique silencioso (ou seja, não emita prompts) e leia suas senhas antigas e novas a partir da entrada padrão, em vez de /dev/tty (como o programa passwd(1) faz). Esta opção é para ajudar as pessoas a escrever scripts para dirigir o smbpasswd

eu -você -n

idexibe as identificações do sistema de um usuário especificado.

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

Exibir um nome em vez de um UID/GID

Por padrão, o comando id exibe o número das opções -G, -g e -u. Você pode forçar o comando id a exibir o nome do UID ou GID em vez do número das opções -G, -g e -u passando a opção -n da seguinte maneira:

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

leia mais sobre id:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/

O crédito vai para:Brett(solução),Casa de turismo rural Vivek(informações profundas)

uma pequena dica em caso de problemas(Crédito para:Paulo):https://superuser.com/a/343163/1169381

Responder3

se você não quiser passar o argumento para o script, você pode tentar isto

#!/bin/bash

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

e então invoque o script.

Responder4

Estou criando o nome do arquivo smb.sh, conteúdo 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

e você pode enviar parâmetros para smb.sh assim

./smb.sh myusername  mypassword

simples, você pode usar o arquivo smb.sh com a linguagem PHP, usar a função PHP exec

informação relacionada