에코 -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 옵션은 개행 문자의 추가 인스턴스에 대한 echo의 해석뿐만 아니라 \t로 표시되는 가로 탭과 같은 다른 특수 문자의 해석을 활성화하는 데 사용됩니다.

파이프 기호 "|"

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 -u -n

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 옵션을 전달하여 id 명령이 -G, -g 및 -u 옵션에 대한 숫자 대신 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 함수를 사용할 수 있습니다.

관련 정보