3000+ সোলারিস, এআইএক্স এবং লিনাক্স সার্ভারে রুট পাসওয়ার্ড পরিবর্তন করার সর্বোত্তম উপায়?


12

দীর্ঘ গল্প সংক্ষিপ্ত: বড় পুরানো কর্পোরেশন, প্রচুর ইউনিক্স / লিনাক্স সার্ভার।

আমি বেশ কয়েক বছর আগে যে স্ক্রিপ্টগুলি ফেলেছিলাম তার জন্য আমি উত্তরাধিকার সূত্রে পেয়েছি। এর মধ্যে একটি হ'ল একটি স্ক্রিপ্ট যা আমাদের সমস্ত সার্ভারগুলিতে মূল পাসওয়ার্ডটি বিশ্বব্যাপী আপডেট করতে প্রতি X এক্স পরিমাণ মাসে চালিত হবে।

স্ক্রিপ্টটি শেল স্ক্রিপ্ট এবং প্রত্যাশার একটি জগাখিচুড়ি, এবং এটি এসএসএইচ বিশ্বাসের উপর কাজ করে যা আমাদের সমস্ত সার্ভার এবং একটি কেন্দ্রীয় কমান্ড এবং নিয়ন্ত্রণ সার্ভারের মধ্যে সেট আপ করা হয়।

সমস্যাটি হ'ল, স্ক্রিপ্টটি বিশাল এক জগাখিচুড়ি। প্রত্যাশা আদেশগুলি "ইউএসআইএক্স / লিনাক্স বাক্সে বিদ্যমান" পাসডাব্লুডি "এর প্রতিটি সম্ভাব্য সংস্করণটির জন্য অ্যাকাউন্ট করার চেষ্টা করছে - এবং সেগুলি কিছুটা আলাদা হয়।

যেহেতু আমরা আমাদের প্রচুর অবকাঠামো প্রসারিত এবং আপগ্রেড করছি, স্ক্রিপ্টটি সত্যিই নিয়ন্ত্রণহীন হয়ে উঠছে।

আমার প্রশ্ন: এটি করার আরও ভাল উপায় আছে কি? ইতিমধ্যে প্রতিষ্ঠিত এসএসএইচ আস্থা আছে তা ধরে নিচ্ছি, একই সাথে 3000+ সার্ভারে রুট পাসওয়ার্ড পরিবর্তন করার সর্বোত্তম উপায় কী?


2
sudoসম্পূর্ণরূপে মূল পাসওয়ার্ড ব্যবহার এবং মুছে ফেলা কোনও বিকল্প নয়, তাই না?
দিমিত্রি চুবারভ

5
একটি ইন্টার্ন ভাড়া? :)
EEAA

1
@ দিমিত্রিচুবারভ "সুডো" ব্যবহার করে বোঝায় যে একটি পাসওয়ার্ড বজায় রাখতে (এবং পরিবর্তন করতে) একটি আলাদা অ্যাকাউন্ট থাকবে - তবে কথাটি কোথায়?
দ্য ওয়াববিট 22'13

1
@ সিনেটিকন-ডিজে অন্যান্য অ্যাকাউন্টগুলি নতুন করে তৈরি করা যেতে পারে এবং এটি কেন্দ্রীয়ভাবে রক্ষণাবেক্ষণ করা কিছু ডাটাবেজে যেমন এলডিএপি বা এনআইএস যা আরও ভাল সমর্থিত তা সংরক্ষণ করা যেতে পারে। স্থানীয় রুটটি ছিঁড়ে ফেলা এবং এলডিএপ থেকে আসাটির সাথে এটি প্রতিস্থাপন করা একই জিনিস নয়।
দিমিত্রি চুবারভ

2
আপনি যদি> 3 কে মেশিন পেয়ে থাকেন তবে আপনার গতকাল পরিচালনার সরঞ্জামগুলি দরকার ...!
ওয়ারেন

উত্তর:


17

পুতুল ব্যবহার করুন ।

পুতুল অত্যন্ত নমনীয়, বজায় রাখা সহজ এবং এসএসএল ব্যবহার করে। কিছুটা ওভারকিল শব্দ হতে পারে এবং আপনার পুতুল সিস্টেমটি তৈরি করতে আপনাকে আরও কিছু প্রচেষ্টা করতে হবে।

কিন্তু। সম্ভবত আপনি এই মেশিনগুলির সাথে করণ এটি শেষ ভর-আপডেট নয়। পুতুল আপনাকে প্রচুর সময় সাশ্রয় দেয় ও দেয় যখন বাস্তব-যা-কিছু গণ-আপডেট পদ্ধতি শুরু হয় এবং স্ক্রিপ্টগুলি খুব পঠনযোগ্য / পুনরায় ব্যবহারযোগ্য।

কমপক্ষে এটি আমার জন্য কয়েক বছর আগে কাজ করেছে এবং এখনও আমি Pu পুতুলের কিছু রেসিপি (ওরফে স্ক্রিপ্ট) ব্যবহার করতে সক্ষম হয়েছি। আমি এটিকে কিছুটা ছোট পরিবেশেও ব্যবহার করেছি কেবল এটি নিশ্চিত করে নিন যে প্রতিটি মেশিন আসলেই একটি পরিচিত রাষ্ট্র রয়েছে

আমি এটি বহুবার প্রমাণ করেছি (বহু সংস্থায়) সমস্ত কাস্টমাইজড ডিপ্লোয়মেন্ট স্ক্রিপ্টগুলি কিছুক্ষণ পরে বা যখন পরের লোকটি ভিতরে আসে তখন বাটটিতে ব্যথা হয়ে যায় And এবং যতক্ষণ আপনি সেলফোন বহন করেন ততক্ষণ পুরানো স্ক্রিপ্টগুলি আপনাকে আটকায়।

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


4
সম্মত, তবে পাসওয়ার্ড সেট করতে একটি ব্যবহার করবেন নাuser{"root":} । পরিবর্তে, একটি ব্যবহার করুন exec{"chpasswd -e ..."}যা অনেক বেশি নিরাপদ।
ডেনিস কার্সেমেকার

7
দয়া করে আপনার উত্তরটি সংশোধন করুন, পুতুল এসএসএইচ নয়, এসএসএল ব্যবহার করে। বাকীগুলির সাথে সম্মত হন, যদিও উত্তরদাতাকে এই ব্যবহারের ক্ষেত্রে হালকা ওজনের বিকল্পের চেয়ে বেশি উপযুক্ত বলে মনে হয়। কেবল pip install ansibleএকটি জিএনইউ / লিনাক্স বাক্সে, হোস্টগুলির একটি তালিকা তৈরি করুন এবং ansible -m user -a "password=$crpyt"। কোন এজেন্ট প্রয়োজন। বক্সের বাইরে জিএনইউ / লিনাক্স, এআইএক্স এবং সোলারিস পরিচালনা করে।
দাউদ

সত্য যে এটি এসএসএইচ নয়, এসএসএল ব্যবহার করে। আমি এমন একটি সিস্টেমে রক্ষণাবেক্ষণকারী হিসাবে ব্যবহার করি যেখানে পুতুলকে ক্লায়েন্ট - লম্বা গল্পের সংক্ষিপ্তকরণের মাধ্যমে এসএসএইচের মাধ্যমে ব্যবহার করা হত। উত্তর সংশোধন করা হয়েছে। ধন্যবাদ দাউদ যে নির্দেশ করে!
টমি

আমি নীচে আমার নিজের উত্তর সরবরাহ করেছি , তবে আমি আপনার গ্রহণ করছি, কারণ এটি সম্ভবত সমস্যার সবচেয়ে "সঠিক" এবং পরিচালনাযোগ্য দীর্ঘমেয়াদী সমাধান। তবে, আমাদের আকারের পরিবেশে পুতুলকে গুটিয়ে নেওয়ার জন্য এটি অবকাঠামো, পরিকল্পনা, লাইসেন্সিং এবং সময়ের ক্ষেত্রে গুরুত্বপূর্ণ বিনিয়োগ প্রয়োজন। কিছুদিন আমরা সেখানে
পৌঁছে

1
@ ডেনিসকর্সেমেকার: আপনার এটি রিপোর্ট করা উচিত পুতুল ল্যাবগুলিতে একটি বাগ হিসাবে। তারা এটি শুনতে আগ্রহী হবে।
বিল ওয়েইস

3

আমি দুর্দান্ত সাফল্যের সাথে সোলারিসে পার্ল মডিউল অথেন :: পিএএম ব্যবহার করেছি। এখানে একটি নমুনা স্ক্রিপ্ট:

#!/usr/bin/perl

use Authen::PAM;

my $username = 'root';
my $password = '1234567';

die qq{Error: Unknown user\n} unless getpwnam($username);

die qq{Error: You must run this as root.\n} unless ($> == 0);

my $pamh;

sub my_conv_func
{
    my @res;
    while ( @_ )
    {
        my $code = shift;
        my $msg = shift;
        my $ans = "";

        if ($code == PAM_PROMPT_ECHO_OFF() )
        {
            if (($msg =~ /^New Password:/i) or ($msg =~ /^Re-enter new Password:/i))
            {
                $ans = $password;
            }
            else
            {
                die qq{Unknown message: $msg\n};
            }
        }
        else
        {
            print qq{$msg\n};
        }

        push @res, (PAM_SUCCESS(), $ans);
    }
    push @res, PAM_SUCCESS();

    return @res;
}

ref($pamh = new Authen::PAM("passwd", $username, \&my_conv_func)) || die "Error code $pamh during PAM init!";

my $res = $pamh->pam_chauthtok;

print $pamh->pam_strerror($res),"\n" unless $res == PAM_SUCCESS();

exit 0;

2

পার্ল লিখতে পারলে নেট :: ওপেনএসএসএইচ :: সমান্তরাল এসএসএইচ এর মাধ্যমে রিমোট হোস্টগুলিতে সমান্তরালে ক্রিয়া সম্পাদন করতে পারে এমন স্ক্রিপ্টগুলি লিখতে দেয়।

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


1

আমি "সেরা" সম্পর্কে জানি না, এবং আপনার মিশ্রণে সমস্ত নন-লিনাক্স * নিক্স মেশিনের পক্ষে এটি সম্ভব কিনা, তবে আপনি কি এই জাতীয় ক্রিয়াকলাপের জন্য পুতুল বা সিফিনজিনের দিকে নজর রেখেছেন?

সেখানে পরিচয় ব্যবস্থাপনার জন্য বাণিজ্যিক (অত্যন্ত ব্যয়বহুল) সরঞ্জামও রয়েছে, আমি অতীতে দুটি দেখেছি / ব্যবহার করেছি হ'ল ওরাকল আইডেন্টিটি ম্যানেজার এবং নভেল সমতুল্য।


1

এই গবেষণা চালিয়ে যাওয়ার পরে, আমি কয়েকটি জিনিস শিখেছি ...

প্রথম এবং সর্বাগ্রে, এটি স্বয়ংক্রিয়ভাবে চালিত করা সত্যিই বিরক্তিকর কাজ, বিশেষত বিভিন্ন বিভিন্ন পরিবেশের মধ্যে। এই প্রশ্নের সর্বাধিক সঠিক উত্তর সম্ভবত @ টমি'র পুতুল ব্যবহার করুন।

অবশেষে আমি পুতুলকে অবকাঠামোগত ব্যবস্থাপনার জন্য প্রত্যাশা করব, তবে এখনই রুট পাসওয়ার্ড পরিবর্তনের জন্য পুরো এন্টারপ্রাইজের ইউনিক্স সার্ভারগুলিতে স্থাপন করা কোনও বিকল্পের পক্ষে এটি সম্ভবপর নয়।

অনেকগুলি ম্যানেজ এবং প্রচুর গুগল-ফু পড়ার পরে, আমি একটি স্ক্রিপ্ট নিয়ে আসতে সক্ষম হয়েছি যা টার্গেট সার্ভারের তালিকার মধ্য দিয়ে যায়, একটি এসএসএইচ সংযোগ খোলে এবং নিম্নলিখিতগুলির মধ্যে একটি চালায়:

# Solaris
# Generate new pass via crypt(newpass,salt) and insert it into /etc/shadow

# AIX
$ echo "root:newpass" | chpasswd -f NOCHECK

# Linux
$ echo "newpass" | passwd root --stdin

# IBM VIO (Virtual I/O)
$ echo "echo \"padmin:newpass\" | chpasswd -f NOCHECK" | oem_setup_env

# IBM HMCs (Hardware Management Consoles)
$ chhmcusr -u hscroot -t passwd -v "newpass"

এটি কেবল those কমান্ডগুলি চালানোর চেয়ে কিছুটা বেশি করে, তবে উপরেরগুলি যাদু কাজ করে।

সোলারিসে অ-পুনরাবৃত্তভাবে পাসওয়ার্ড পরিবর্তন করার কোনও সহজ উপায় আমি খুঁজে পেলাম না - তাই আমরা ফ্লাইতে পরিবর্তনের /etc/shadowচেষ্টা করেছি।


2
শেল ইতিহাসে লগ হওয়ার সাথে সাথে কমান্ডলাইনে ক্লিয়ারটেক্সট পাসওয়ার্ডগুলি রাখবেন না। বা শেল ইতিহাসটি করার /dev/nullআগে আপনি সেট করুন ।
মার্সিন

1
হ্যাঁ, স্ক্রিপ্টে পাসওয়ার্ডও রাখবেন না, এনক্রিপ্ট করা পাসউইডড যুক্ত করতে আমার স্ক্রিপ্টটি পরীক্ষা করুন
রাহুল পাতিল

1

সম্প্রতি আমি ব্যাশ স্ক্রিপ্টটি ব্যবহার করে এটি করেছি ..

#!/usr/bin/env bash

# Change Password of Remote Server Using SSH

#--------------------------------------------
# Define User which you want to
# Change Password in remote server
#--------------------------------------------
Uname="root"
# Create Password in Encrpyted Form Using below command,
# and store in this script
# perl -e'print crypt("YourPassword", "salt")' ; echo -e
# then copy and past in following varible,
# password should be single qouted*

Password='safv8d8ESMmWk'

Update_Pass() {
  ssh $ruser@$Server_ip  -p $port "echo ${Uname}:${Password} | chpasswd -e"
}

Show_Help(){
cat <<_EOF
Usage $0        [OPTION]..
Mandatory arguments to long options are mandatory for short options too.
  -i, --ip     <IP_ADDR_OF_SREVER> IP Address Of Remote Server
  -u, --user   <Username>          Username Of Remote Server    <Default User is root>
  -p, --port   <port>              Port Of Remote Server        <Default is 22>

Note:- For Security Reason Do Not Provide Password to the script, because
       it will get save in history, so do not provide it,
       script will prompt for password

Report $0 bugs to loginrahul90@gmail.com
_EOF
}



Main() {

        case $1 in
           -i|--ip) Server_ip=$2;
                    ruser="$4"; [[ -z $ruser ]] && ruser=root
                    port="$6";  [[ -z $port  ]]  && port=22
                    Update_Pass ;;
                *)  Show_Help ;;
        esac
}

Main $*

1

এটি এখন পর্যন্ত আমার সমাধান। এটি এখনও একাধিক সিস্টেমে কাজ করে কিনা তা দেখতে হবে

#!/usr/bin/env bash

ChangePassword()
{
    echo "changing password for server $ServerIp"
    ssh root@$ServerIp "echo root:${NewPassword} | chpasswd" < /dev/null
}

CreatePassword()
{
    while true;
    do
        echo "Please enter the new password :"
        read -s NewPassword <&0
        echo "Confirm the password :"
        read -s ConfirmPassword <&0 
        # /proc/${PPID}/fd/0

        if [ "$NewPassword" == "$ConfirmPassword" ]
        then
            break
        else
            echo "Passwords do not match"
            echo "Try again..."
        fi
    done
    ChangePassword
    echo "end of createpassword"
}

SetUpPasswordlessSSH()
{   
    echo "enter the old password from server $ServerIp when asked"
    ssh root@$ServerIp mkdir -p .ssh
    cat .ssh/id_rsa.pub | ssh root@$ServerIp 'cat >> .ssh/authorized_keys'

    echo "Passwordless SSH is now available"
    echo "Now you can change the password"
    CreatePassword
}

NoSSH()
{
    echo "Passwordless SSH for this server with ip $ServerIp is not yet set up."
    read -p "Do you want to set it up now? " -n 1 -r <&0
    echo "" 
    if [[ ! $REPLY =~ ^[Yy]$ ]]
    then
        break
    else
        SetUpPasswordlessSSH
    fi
}

AcceptHostKey()
{
    read -p "Do you trust the server? " -n 1 -r <&1 
    echo ""
    if [[ ! $REPLY =~ ^[Yy]$ ]]
    then
        break
    else
        SetUpPasswordlessSSH
    fi
}

Main()
{
    while read -r ServerIp <&9
    do
        echo  "Server $ServerIp ..."
        status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ServerIp echo ok 2>&1)
        if [[ $status == ok ]]
        then
            echo "creating password"
            CreatePassword
            echo "password changed"
        elif [[ $status == "Permission denied"* ]]
        then
            NoSSH
        elif [[ $status == "Host key verification failed"* ]]
        then
            echo "Error: $status"
            AcceptHostKey
        else
            echo "ERROR OCCURED FOR SERVER WITH IP: $ServerIp"
            echo "Error: $status"
        fi
    done 9< servers.txt
    history -cw
    clear
}

Main $*

0

আপনি একইসাথে একাধিক হোস্টে আপনার কমান্ড চালানোর জন্য পিডিএস ব্যবহার করতে পারেন ।


এবং আপনি কি কমান্ড চালাতে যাচ্ছেন? passwdউল্লিখিত বিভিন্ন সংস্করণে পৃথক। pwসর্বদা উপলভ্য নয় ....
ক্রিস এস

আমাদের কাছে সমস্ত বাক্সে কমান্ড চালানোর অংশটি বেশ ভালভাবেই রয়েছে .. সমস্যাটি হল পাসওয়ার্ডের আসল পরিবর্তন। যতদূর আমি জানি, passwdসর্বদা ব্যবহারকারী-ইন্টারেক্টিভ হয়।
রিকাপার

passwd--stdin
আরএইচইএল

0

পুতুল ছাড়াও: সল্টস্ট্যাক আরেকটি পদ্ধতি - এসএসএইচ লাইবসকে ক্রমান্বয়ে বা সমান্তরালভাবে ফ্যাব্রিক http://docs.fabfile.org/en/1.6/ , ক্যাপিস্ট্রানো বা অনুরূপ ব্যবহার করে স্বয়ংক্রিয় সম্পাদন স্বয়ংক্রিয়ভাবে প্রয়োগ করা দরকার যা মোতায়েনের জন্য বেশি সময় / প্রচেষ্টা প্রয়োজন হয় না।


0

দুটি বিকল্প:

পুতুল ব্যবহার করুন

রান ডেক ব্যবহার করুন। রান ডেক একটি সার্ভার যা আপনাকে একসাথে কয়েক শ মেশিনে কমান্ড কার্যকর করতে দেয়। মেশিনের কেবলমাত্র একটি উপসেটে কমান্ড কার্যকর করতে আপনি মেশিনগুলিকে দলে দলে গ্রুপ করতে পারেন।

http://rundeck.org


-2

আমি মনে করি /etc/shadowফাইলটির ফর্ম্যাটটি লিনাক্স ডিস্ট্রোস জুড়ে বেশ মানক। আপনি কি পাসওয়ার্ড আপডেট করার জন্য একটি সহজ অ্যাডক স্ক্রিপ্ট লিখতে পারেন।

cat /etc/shadow| awk -v pass='NEWPASSHASH' -v now=`date '+%s'` 'BEGIN{ OFS=FS=":"} /^root/ {$2=pass; $3=now} {print}' > /tmp/shadow && mv /tmp/shadow /etc/shadow

আমি এটি পরীক্ষা করে নেওয়ার বিষয়টি নিশ্চিত করব যাতে আপনি নিজের স্বরে তালা ঝুলেন না;)


আমি বিশ্বাস করি সম্পাদনা / ইত্যাদি / ছায়া যাবার উপায়। যাইহোক, পুনর্নির্দেশ সম্পাদনা করার আগে / ইত্যাদি / ছায়া মুছে ফেলা হবে না? এটি এড বা প্রাক্তনের ক্ষেত্রে মনে হচ্ছে।
এমপিজেড 0

3
ছায়ার ফর্ম্যাটটি হতে পারে তবে হ্যাশগুলি সর্বত্র একই অ্যালগরিদম দ্বারা ব্যাখ্যা করার গ্যারান্টিযুক্ত নয়। প্লাস আপনার ছোট স্ক্রিপ্টটি কেবল ছায়া থেকে সমস্ত এন্ট্রি সরিয়ে ফেলেছে। :}
টিঙ্ক

লফ উফ, ঠিক করা উচিত। আমি আশা করি আপনি এই
টিঙ্কটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.