迴聲-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 函數

相關內容