回声-e

回声-e

我想samba使用 shell 脚本设置一个密码来设置共享目录。我写了以下脚本test.sh

#!/bin/bash

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

这将打印以下内容:

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

正如它所指出的,我没有以 root 身份运行它,当我以 root 身份运行它时,即,sudo ./test.sh它运行良好。但问题是,它添加root而不是noobuser,这是我登录的用户。

我如何noobuser通过做类似的事情来添加(我感觉我在这里遗漏了一些东西)?

答案1

测试.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"

调用:

sudo ./test.sh

答案2

这是我如何通过 bash 脚本实现自动化的一个片段smbpasswd -a,就像魅力一样。

username="bob"

pass="secret"

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

这个是扩展的,它会为您插入当前的用户名。 (没有 awk 它更短更干净)

pass="secret"

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

在下面找到更多详细信息:

回声-e

-e 选项用于启用 echo 对换行符的其他实例的解释以及对其他特殊字符的解释,例如由 \t 表示的水平制表符。

管道符号“|”

在类 Unix 计算机操作系统中,管道是一种使用消息传递进行进程间通信的机制。

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

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

信用归于:劳伦斯·C, 维基百科

smbpasswd -s

-s 选项使 smbpasswd 保持静默(即不发出提示)并从标准输入读取其旧密码和新密码,而不是从 /dev/tty 读取(就像 passwd(1) 程序那样)。这个选项是为了帮助人们编写脚本来驱动 smbpasswd

id-u-n

id显示指定用户的系统标识。

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

显示名称而不是 UID/GID

默认情况下,id 命令显示 -G、-g 和 -u 选项的编号。您可以通过传递 -n 选项来强制 id 命令显示 UID 或 GID 的名称,而不是 -G、-g 和 -u 选项的数字,如下所示:

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

阅读更多有关idhttps://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/

信用归于:布雷特(解决方案),维韦克盖特(深度信息)

出现问题时的一点提示(归功于:保罗:https://superuser.com/a/343163/1169381

答案3

如果你不想将参数传递给脚本那么你可以尝试这个

#!/bin/bash

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

然后调用脚本。

答案4

我正在创建文件名 smb.sh,内容如下

#!/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

你可以像这样将参数发送到 smb.sh

./smb.sh myusername  mypassword

很简单,您可以使用 PHP 语言的 smb.sh 文件,使用 PHP exec 函数

相关内容