কীভাবে স্বয়ংক্রিয়ভাবে ব্যাশ স্ক্রিপ্টের সাথে ব্যবহারকারীর অ্যাকাউন্ট এবং পাসওয়ার্ড যুক্ত করবেন?


200

আমার লিনাক্সে (ফেডোরা 10) ব্যবহারকারীর অ্যাকাউন্ট তৈরি করার ক্ষমতা থাকা এবং স্বয়ংক্রিয়ভাবে ব্যাশ স্ক্রিপ্টের মাধ্যমে একটি পাসওয়ার্ড বরাদ্দ করা উচিত (বা অন্যথায়, প্রয়োজন হলে)।

উদাহরণস্বরূপ ব্যাশের মাধ্যমে ব্যবহারকারী তৈরি করা সহজ:

[whoever@server ]#  /usr/sbin/useradd newuser

বাশে কোনও পাসওয়ার্ড নির্ধারণ করা কি এর সাথে কার্যত অনুরূপ কিছু, তবে স্বয়ংক্রিয়ভাবে:

[whoever@server ]# passwd newuser
Changing password for user testpass.
New UNIX password:
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
[whoever@server ]#

11
কেন এই অফটপিক?
অরেঞ্জটাক্স

16
আমি মনে করি এই প্রশ্নটি বিষয়টিতে রয়েছে। এখনকার অন্যতম শক্তিশালী প্রবণতা হ'ল "কোড হিসাবে কনফিগারেশন" এর ডিভোপস মনোভাব, অর্থাৎ প্ল্যাটফর্মটি "প্রোগ্রামিং" দ্বারা অ্যাডমিন পদক্ষেপগুলির একটি ক্রম তৈরি করা হয়েছে যা প্ল্যাটফর্মটি বুটস্ট্র্যাপ করে। স্ক্রিপ্ট মোডে ব্যবহারকারী পরিচালনা করা অবশ্যই এই প্রোগ্রামিংয়ের অংশ।
ড্যান বার্গ জনসন

2
ডিভোপস হিসাবে, আমি মনে করি এটি একটি দরকারী প্রশ্ন (দরকারী উত্তর সহ) তবে এটি আমার সিসএডমিন টুপিটির সাথে রয়েছে। এটি সুপার ইউজারে স্থানান্তরিত করার জন্য আরও বোধগম্য হতে পারে।
অ্যান্টনি জিওগেইগান 10

1
অনুরূপ প্রশ্ন: Askubuntu.com/q/94060/250556
থারস্মমনার

এটি কোনও expectস্ক্রিপ্টের সাহায্যেও সমাধান করা যায় ।
ইয়ারন

উত্তর:


122

আপনি passwd কমান্ডটি চালাতে পারেন এবং এটি পাইপযুক্ত ইনপুট প্রেরণ করতে পারেন। সুতরাং, এর মতো কিছু করুন:

echo thePassword | passwd theUsername --stdin

3
এই পদ্ধতির বোনাস হ'ল এটি নিরাপদ (ধারণা করা echoহয় ব্যবহৃত শেলের মধ্যে একটি অন্তর্নির্মিত ধারণা , যা এটি সাধারণত) /proc/
মারিয়ান

8
আমি echo -e "password\npassword\n" | passwd13.04
d0c_s4vage

31
--stdin নতুন লিনাক্স সিস্টেমে হ্রাস করা হয়েছে। পরিবর্তে chpasswd ব্যবহার করুন।
wuxb

16
@ মারকাস ওরিলি কাজ করে, তবে জবাবদিহির মতো প্রভিশন সরঞ্জাম ব্যবহার করার সময় নয়। @ নিবিলে যেমন বলেছে, আপনার chpasswd ব্যবহার করা উচিত। তাই এখানে কি কাজ করে হল: echo 'myuser:mypass' | chpasswd। আশা করি এইটি কাজ করবে.
আমির রুস্তমজাদেহ

আমি কি এটি একটি ডকার ফাইলে রাখতে পারি? আমি মনে করি এটি ডকারের জন্য ভোজ্য হওয়া উচিত।
qubsup

201

আপনি chpasswd ব্যবহার করতে পারেন :

echo username:new_password | chpasswd

সুতরাং, আপনি ব্যবহারকারীর usernameজন্য পাসওয়ার্ড পরিবর্তন করুন new_password


5
+1, এটি কাজের সঠিক হাতিয়ার: $ apropos chpasswd...chpasswd (8) - update passwords in batch mode
স্টিভেন কে

এটি এর সাথেও কাজ করে busybox, যেখানে passwdনেই (কোনও --stdinবিকল্প নেই)।
টিম্ম্ম্ম

83

আমি নিজেকে একই জিনিস জিজ্ঞাসা করছিলাম, এবং পাইথন স্ক্রিপ্টের উপর নির্ভর করতে চাইনি।

এটি একটি ব্যাশ লাইনে একটি সংজ্ঞায়িত পাসওয়ার্ড সহ কোনও ব্যবহারকারীকে যুক্ত করার লাইন:

useradd -p $(openssl passwd -1 $PASS) $USER

25
useradd -p $(openssl passwd -1 $PASS) $USERআরও আধুনিক, কারণ ব্যাক-টিকগুলি হ্রাস করা হয় এবং $()প্রস্তাবিত হয়।
ব্রাইসন

এটির সাথে আমার একটি সমস্যা ছিল: আমি zsh এর শেল দিয়ে আমার ব্যবহারকারী তৈরি করেছি, বুঝতে পারছিলাম না যে সেই সময়ে zsh ইনস্টল করা হয়নি। আপনি যদি এটি করেন তবে পাসওয়ার্ড লগইন ব্যর্থ হবে, সুতরাং আপনি ধরে নেওয়ার আগে এটি কাজ করছে না (এটি অবশ্যই আজকের আর্চ এবং ডেবিয়ান 7 তে কাজ করবে) আপনি এটি একটি নতুন ইনস্টলেশনতে পরীক্ষা করতে পারেন।
ব্রাইসন

2
useradd -m -p <password> -s /bin/bash <user>, -ম ক্রেটস হোম ডিরেক্টরি, -স ব্যবহারকারীদের ডিফল্ট শেল, বিকল্প passwordএবং userআপনার প্রয়োজনের জন্য নির্দিষ্ট করে ।
থারস্মমনার

2
এছাড়াও আপনি পাসওয়ার্ড লবণ করতে পারেন: useradd -m -p $(openssl passwd -1 -salt $SALT $PASS)। আমি মনে করি এটি পরে উবুন্টুর জন্য প্রয়োজন।
ক্রেগমজ

55

নীচের কোডটি উবুন্টু 14.04 এ কাজ করেছিল। এটি অন্যান্য সংস্করণ / লিনাক্স ভেরিয়েন্টে ব্যবহার করার আগে চেষ্টা করুন।

# quietly add a user without password
adduser --quiet --disabled-password --shell /bin/bash --home /home/newuser --gecos "User" newuser

# set password
echo "newuser:newpassword" | chpasswd

3
আমি বুঝতে পারছি না--gecos
Alban

11
en.wikipedia.org/wiki/Gecos_field দ্য gecos ক্ষেত্র, বা GECOS ক্ষেত্র ইউনিক্স চালু / etc / passwd ফাইলের মধ্যে একটি এন্ট্রি, এবং অনুরূপ অপারেটিং সিস্টেম আছে। এটি সাধারণত অ্যাকাউন্ট বা এর ব্যবহারকারী (গুলি) সম্পর্কিত সাধারণ তথ্য যেমন তাদের আসল নাম এবং ফোন নম্বর রেকর্ড করতে ব্যবহৃত হয়। জিইসিওএস অর্থ জেনারেল ইলেকট্রিক কমপ্রেইন্সিয়াল অপারেটিং সিস্টেম, জিইওএস-এর বৃহত সিস্টেম বিভাগ যখন হানিওলে বিক্রি হয়েছিল তখন এর নামকরণ করা হয়েছিল জিসিওএসে।
ইং

এটি আমার জন্য ডেবিয়ান 8-তে সঠিক উত্তর ছিল, আমার সার্ভার সেটআপ বাশ স্ক্রিপ্টে কবজির মতো কাজ করেছিল!
লেভেলজও

GECOS ক্ষেত্রটি মূলত একটি ব্যবহারকারীর বিবরণ ক্ষেত্র। আপনি যা চান সেখানে লিখুন।
19 Ван

30

আমি ট্রলেমনকি এর পদ্ধতির পছন্দ করি echo thePassword | passwd theUsername --stdinযদিও এটি আমার পক্ষে লিখিতভাবে কার্যকর হয়নি। এটি তবে আমার পক্ষে কাজ করেছিল।

echo -e "$password\n$password\n" | sudo passwd $user

-e\nনতুন লাইন হিসাবে স্বীকৃত হয়।

sudo উবুন্টুর রুট অ্যাক্সেস।

ডাবল উদ্ধৃতিগুলি $ভেরিয়েবলগুলি সনাক্ত এবং প্রসারিত করতে হবে।

উপরের কমান্ডটি পাসওয়ার্ড এবং একটি নতুন লাইন, দু'বার পাস করে passwd, যা passwdপ্রয়োজন।

যদি ভেরিয়েবল ব্যবহার না করে তবে আমার মনে হয় এটি সম্ভবত কার্যকর হয়।

echo -e 'password\npassword\n' | sudo passwd username

একক উদ্ধৃতি এখানে যথেষ্ট হবে।


2
বাশে সুন্দর করে কাজ করে। তবে, sh এ চলতে থাকলে -e বিকল্পটি কাজ করে না। আমি যে হার্ড উপায়টি আসলে "-e" আউটপুট করে তা খুঁজে পেয়েছি। ভাগ্যক্রমে, -e বিকল্পটি sh এ প্রয়োজনীয় নয়, পলায়ন সেখানে ডিফল্ট। পোর্টেবল সংস্করণ হ'ল প্রিন্টফ "পাসওয়ার্ড \ n পাসওয়ার্ড \ n" | ... পরিবর্তে.
ড্যান বার্গ জনসন

উবুন্টুর সঠিক উত্তর
মাশপি রহমান

23

নিম্নলিখিতটি আমার জন্য কাজ করে এবং উবুন্টু ১৪.০৪-এ পরীক্ষিত। এটি এমন একটি লাইনার যা কোনও ব্যবহারকারীর ইনপুট প্রয়োজন হয় না।

sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME

@ ট্রেলেমনকি থেকে নেওয়া


13

আপনি -p বিকল্পটি ব্যবহার করতে পারেন।

useradd -p encrypted_password newuser

দুর্ভাগ্যক্রমে, এর জন্য আপনাকে নিজের পাসওয়ার্ডটি হ্যাশ করতে হবে (যেখানে পাসডাব্লুড্ড আপনার জন্য এটি করে)। দুর্ভাগ্যক্রমে, কিছু ডেটা হ্যাশ করার কোনও মানক ইউটিলিটি বলে মনে হচ্ছে না তাই আপনাকে এটি নিজে লিখতে হবে।

আপনার জন্য এনক্রিপশন করার জন্য আমি এখানে একটি পাইথন স্ক্রিপ্টটি বেত্রাঘাত করেছি। ধরে নিই যে আপনি এটিকে পিক্রিপ্ট বলেছেন, আপনি তারপরে আপনার উপরের কমান্ড লাইনটি লিখবেন:

useradd -p $(pcrypt ${passwd}) newuser

সতর্কতা একটি দম্পতি সচেতন হতে হবে।

  1. Pcrypt চলমান থাকাকালীন, PSI কমান্ডের মাধ্যমে প্লেটেক্সট যে কোনও ব্যবহারকারীর কাছে দৃশ্যমান হবে।
  2. pcrypt পুরানো স্টাইলের ক্রিপ্ট ফাংশন ব্যবহার করে - আপনি যদি MD5 হ্যাশের মতো আরও কিছু আধুনিক ব্যবহার করেন তবে আপনাকে পিসিপিট পরিবর্তন করতে হবে।

এবং এখানে pcrypt:

#!/usr/bin/env python

import crypt
import sys
import random

saltchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def salt():
    return random.choice(saltchars) + random.choice(saltchars)

def hash(plain):
    return crypt.crypt(arg, salt())

if __name__ == "__main__":
    random.seed()
    for arg in sys.argv[1:]:
        sys.stdout.write("%s\n" % (hash(arg),))

ধন্যবাদ আর ক্লাচকো, এটি কাজ করা উচিত। আমি বিশ্বাস করতে পারি না আমি -p বিকল্প সম্পর্কে জানতাম না। আমি নিজেই হ্যাশিংয়ের যত্ন নিতে পারি :)
মডার্ন কার্পেন্ট্রি

5
পার্ল- 'মুদ্রণ ক্রিপ্ট ($ এআরজিভি [0], "পাসওয়ার্ড")' '
মাইপ্যাসওয়ার্ড

আপনি কি কিছুটা ব্যাখ্যা করতে পারেন, আমি কীভাবে পাসওয়ার্ডটি ব্যবহার করতে সক্ষম হবো এবং পরে হ্যাশ পাসওয়ার্ডটি ব্যবহার করব না?
সিকার

12

হোম ডিরেক্টরি এবং পাসওয়ার্ড সহ একটি sudo ব্যবহারকারী তৈরি করতে একক লাইনার।

useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}

অসাধারণ. স্থাপনার স্ক্রিপ্টে ভাল কাজ করে
TheRealChx101

7

--stdinদেবিয়ান নিয়ে কাজ করে না এটা বলে:

`passwd: unrecognized option '--stdin'`

এটি আমার পক্ষে কাজ করেছে:

#useradd $USER
#echo "$USER:$SENHA" | chpasswd

এখানে আমরা আরও কিছু ভাল উপায় খুঁজে পেতে পারি:


এটি করার উপযুক্ত উপায় এটিই এবং একমাত্রভাবে সরকারীভাবে ছায়া স্যুটটির রক্ষণাবেক্ষণকারীদের দ্বারা সমর্থিত। দেখুন এই বাগ রিপোর্ট
ইয়ার্ডেনা

6

আপনি আপনার ব্যাশ স্ক্রিপ্টে প্রত্যাশা ব্যবহার করতে পারেন।

Http://www.seanodonnell.com/code/?id=21 থেকে

#!/usr/bin/expect 
######################################### 
#$ file: htpasswd.sh 
#$ desc: Automated htpasswd shell script 
######################################### 
#$ 
#$ usage example: 
#$ 
#$ ./htpasswd.sh passwdpath username userpass 
#$ 
###################################### 

set htpasswdpath [lindex $argv 0] 
set username [lindex $argv 1] 
set userpass [lindex $argv 2] 

# spawn the htpasswd command process 
spawn htpasswd $htpasswdpath $username 

# Automate the 'New password' Procedure 
expect "New password:" 
send "$userpass\r" 

expect "Re-type new password:" 
send "$userpass\r"

5

আমি জানি যে আমি এই বছরগুলি পরে আসছি, কিন্তু আমি বিশ্বাস করতে পারি না যে কেউ ব্যবহারকারীর প্রস্তাব দেয় না।

usermod --password `perl -e "print crypt('password','sa');"` root

হেল, যদি আপনি যে কোনও পুরানো এইচপিইউক্স ব্যবহার করতে পারেন ঠিক তেমন কেউ যদি এটি করতে চায় usermod.sam

/usr/sam/lbin/usermod.sam -F -p `perl -e "print crypt('password','sa');"` username

স্ক্রিপ্টটি সম্পাদনকারী ব্যক্তি যদি বর্তমান ব্যবহারকারী হন তবে -F প্রয়োজন হয়। অবশ্যই হ্যাশ তৈরি করতে আপনার পার্ল ব্যবহার করার দরকার নেই। আপনি তার জায়গায় ওপেনসেল বা অন্যান্য অনেক কমান্ড ব্যবহার করতে পারেন।


3

এখানে একটি স্ক্রিপ্ট যা এটি আপনার জন্য করবে .....

আপনি চাইলে ব্যবহারকারীদের (বা কেবলমাত্র একজন ব্যবহারকারী) একটি তালিকা যুক্ত করতে পারেন, একসাথে সবকটিরই আলাদা পাসওয়ার্ড থাকবে। বোনাস হিসাবে আপনাকে প্রতিটি ব্যবহারকারীর পাসওয়ার্ডের একটি তালিকা সহ স্ক্রিপ্টের শেষে উপস্থাপন করা হবে। .... আপনি চাইলে কিছু ব্যবহারকারীর রক্ষণাবেক্ষণের বিকল্প যুক্ত করতে পারেন

মত:

chage -m 18 $user
chage -M 28 $user

স্ক্রিপ্টে যা পাসওয়ার্ডের বয়স সেট করবে এবং আরও অনেক কিছু।

=======

#!/bin/bash

# Checks if you have the right privileges
if [ "$USER" = "root" ]
then

# CHANGE THIS PARAMETERS FOR A PARTICULAR USE
PERS_HOME="/home/"
PERS_SH="/bin/bash"

   # Checks if there is an argument
   [ $# -eq 0 ] && { echo >&2 ERROR: You may enter as an argument a text file containing users, one per line. ; exit 1; }
   # checks if there a regular file
   [ -f "$1" ] || { echo >&2 ERROR: The input file does not exists. ; exit 1; }
   TMPIN=$(mktemp)
   # Remove blank lines and delete duplicates 
   sed '/^$/d' "$1"| sort -g | uniq > "$TMPIN"

   NOW=$(date +"%Y-%m-%d-%X")
   LOGFILE="AMU-log-$NOW.log"

   for user in $(more "$TMPIN"); do
      # Checks if the user already exists.
      cut -d: -f1 /etc/passwd | grep "$user" > /dev/null
      OUT=$?
      if [ $OUT -eq 0 ];then
         echo >&2 "ERROR: User account: \"$user\" already exists."
         echo >&2 "ERROR: User account: \"$user\" already exists." >> "$LOGFILE"
      else
         # Create a new user
         /usr/sbin/useradd -d "$PERS_HOME""$user" -s "$PERS_SH" -m "$user"
         # passwdgen must be installed
         pass=$(passwdgen -paq --length 8)
         echo $pass | passwd --stdin $user
         # save user and password in a file
         echo -e $user"\t"$pass >> "$LOGFILE"
         echo "The user \"$user\" has been created and has the password: $pass"
      fi
   done
   rm -f "$TMPIN"
   exit 0
else
   echo >&2 "ERROR: You must be a root user to execute this script."
   exit 1
fi

===========

আশাকরি এটা সাহায্য করবে.

চিয়ার্স, কেরেল


2

আমি আমার নিজের শেল স্ক্রিপ্টে পরীক্ষা করেছি।

  • $new_username মানে সদ্য নির্মিত ব্যবহারকারী
  • $new_password মানে নতুন পাসওয়ার্ড

CentOS এর জন্য

echo "$new_password" | passwd --stdin "$new_username"

দেবিয়ান / উবুন্টুর জন্য

echo "$new_username:$new_password" | chpasswd

ওপেনসুসের জন্য

echo -e "$new_password\n$new_password" | passwd "$new_username"

1

ট্রলেমনকি এর সমাধান আমার জন্য প্রায় কাজ করেছিল ... তবে বেশ নয়। আমি এটি এভাবেই শেষ করেছি:

echo -n '$#@password@#$' | passwd myusername --stdin

2 সমাধানের মূল সমাধানটি তার সমাধানটিতে অন্তর্ভুক্ত করেনি, পাসওয়ার্ডটি এনক্রিপ্ট হওয়াতে -nএকটি যুক্ত করা থেকে প্রতিধ্বনিত করে \nএবং একক উদ্ধৃতি সামগ্রীগুলি আমার ক্ষেত্রে শেল (ব্যাশ) দ্বারা ব্যাখ্যা করা থেকে রক্ষা করে।

বিটিডাব্লু আমি এই কমান্ডটি সেন্টোস 5.6 সিস্টেমে রুট হিসাবে চালিয়েছি যদি কেউ ভাবতে থাকে।


ভাল ধরা, নিশ্চিত নয় যে অন্যরা কীভাবে এটি নতুন লাইনের জিনিসটিতে কাজ করতে সক্ষম হয়েছিল।
M03

1

সমাধান যা দেবিয়ান এবং রেড হ্যাট উভয় ক্ষেত্রেই কাজ করে। পার্ল উপর নির্ভর করে, sha-512 হ্যাশ ব্যবহার করে:

cat userpassadd
    #!/usr/bin/env bash

    salt=$(cat /dev/urandom | tr -dc A-Za-z0-9/_- | head -c16)
    useradd -p $(perl -e "print crypt('$2', '\$6\$' . '$salt' . '\$')") $1

ব্যবহার:

userpassadd jim jimslongpassword

এটি কার্যকরভাবে ওয়ান-লাইনার হিসাবে ব্যবহার করা যেতে পারে, তবে আপনাকে নিজে সঠিক জায়গায় পাসওয়ার্ড, লবণ এবং ব্যবহারকারীর নাম উল্লেখ করতে হবে:

useradd -p $(perl -e "print crypt('pass', '\$6\$salt\$')") username

1

আইবিএম থেকে ( https://www.ibm.com/support/ জ্ঞানসেন্টার/ এসএসইউ_ইএক্স_61/ com.ibm.aix.cmds1/ chpasswd.htm ):

একটি টেক্সট ফাইল তৈরি করুন, টেক্সট.টেক্সট বলুন এবং এটি ব্যবহারকারীর সাথে সেট করুন: পাসওয়ার্ডের জোড়গুলি নিম্নরূপ:

user1:password1
user2:password2
...
usern:passwordn

Text.txt ফাইলটি সংরক্ষণ করুন এবং চালান

cat text.txt | chpassword

এটাই. সমাধানটি হ'ল (ক) স্কেলেবল এবং (খ) কমান্ড লাইনে পাসওয়ার্ড মুদ্রণের সাথে জড়িত না।


0
{ echo $password; echo $password; } | passwd $username 

যদিও এটি তাত্ত্বিকভাবে প্রশ্নের উত্তর দিতে পারে, উত্তরটির প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা ভাল
ওয়ার্নার

0

রেডহ্যাট / সেন্টোসের জন্য এখানে এমন কোড রয়েছে যা একটি ব্যবহারকারী তৈরি করে, পাসওয়ার্ড যুক্ত করে এবং ব্যবহারকারীকে একটি সুডোর করে তোলে:

#!/bin/sh
echo -n "Enter username: "
read uname

echo -n "Enter password: "
read -s passwd

adduser "$uname"
echo $uname:$passwd | sudo chpasswd

gpasswd wheel -a $uname

0

ব্যবহার: ./my_add_user.sh USER PASSWD

কোড:

#!/bin/bash
# my_add_user.sh

if [ "$#" -lt 2 ] 
 then
       echo "$0 username passwd"
       exit
fi

user=$1
passwd=$2

useradd $user -d /data/home/$user  -m  ;
echo $passwd | passwd $user --stdin;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.