에코-e

에코-e

samba공유 디렉토리를 설정하기 위해 쉘 스크립트를 사용하여 비밀번호를 설정하고 싶습니다 . 나는 다음 스크립트를 작성했습니다 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

지적했듯이 루트로 실행하는 것이 아니라 루트로 실행하면 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 옵션을 사용하면 \t로 표시되는 가로 탭과 같은 다른 특수 문자 및 개행 문자의 다른 인스턴스에 대한 echo의 해석이 가능해집니다.

파이프 기호 "|"

Unix 계열 컴퓨터 운영 체제에서 파이프는 메시지 전달을 사용하는 프로세스 간 통신을 위한 메커니즘입니다.

https://en.wikipedia.org/wiki/Pipeline_(유닉스)

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

크레딧은 다음과 같습니다.로렌스 C, 위키피디아

smbpasswd-s

-s 옵션을 사용하면 smbpasswd가 자동으로 실행되고(즉, 프롬프트를 표시하지 않음) (passwd(1) 프로그램과 마찬가지로) /dev/tty에서 읽는 대신 표준 입력에서 이전 암호와 새 암호를 읽습니다. 이 옵션은 사람들이 smbpasswd를 구동하는 스크립트를 작성하는 데 도움이 됩니다.

이드운

id지정된 사용자의 시스템 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 옵션을 전달하여 -G, -g 및 -u 옵션을 사용하여 id 명령에 숫자 대신 UID 또는 GID의 이름을 표시하도록 강제할 수 있습니다.

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

다음에 대해 자세히 알아보세요 id.https://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 함수를 사용할 수 있습니다.

관련 정보