কোন অ্যাকাউন্টে অ্যাক্সেস করতে কোন ssh কী ব্যবহার করা হয়েছিল তা আমি জানতে পারি?


56

কোন অ্যাকাউন্টে অ্যাক্সেস করতে কোন ssh কী ব্যবহার করা হয়েছিল তা খুঁজে পাওয়া সম্ভব? আমার একটি সার্ভারে একটি অ্যাকাউন্ট রয়েছে যা আমি বেশিরভাগ (বিশ্বস্ত!) লোকদের ssh এর মাধ্যমে অ্যাক্সেস করতে পারি। আমি কখন লগ ইন করেছি এবং কখন তা জানতে পেরে আমার পক্ষে এটি দরকারী হবে। আমার কাছে রুট অ্যাক্সেস রয়েছে যাতে আমি লগগুলি দেখতে পারি, তবে সেখানে কিছুই নেই বলে মনে হচ্ছে। লগগুলিতে কীটি সনাক্ত করার কোনও উপায় রাখবে এমন কোনও কনফিগারেশন সুইচ রয়েছে?


আপনি কি sshd_config- এ লগলিভেলের সাথে খেলার চেষ্টা করেছেন?
এইটবিটটনি

বর্তমান অধিবেশন অনুমোদিত করার জন্য কোন কীটি ব্যবহৃত হয়েছিল তা সন্ধান করতে সক্ষম হয়ে আশ্চর্যরূপে দরকারী হবে - আমার ক্ষেত্রে, ভাগ করা লগইনের মাধ্যমে অ্যাক্সেস করা কোনও মার্চুরিয়াল রিপোজিটরিতে অ্যাক্সেস নিয়ন্ত্রণের জন্য। সমস্ত বিদ্যমান কৌশল একটি কমান্ড বিকল্পের মাধ্যমে পরিচয় থ্রেডিং জড়িত, যা কিছুটা clunky।
টম অ্যান্ডারসন

5
এটি সম্পর্কে একটি ওপেনএসএইচ বৈশিষ্ট্য অনুরোধ রয়েছে: দয়া করে প্রমাণীকরণ লগ বার্তায় পাব্লির ফিঙ্গারপ্রিন্ট যুক্ত করুন
স্টিফেন

উত্তর:


38

আপনি যদি sshd কনফিগারেশন ফাইলে যান (সাধারণত /etc/ssh/sshd_config) এবং লগলভেল নির্দেশকে ভার্বোসে পরিবর্তন করেন:

LogLevel VERBOSE

... আপনি লগগুলিতে এরকম কিছু দেখতে পাচ্ছেন:

জুন 24 22:43:42 লোকালহোস্ট এসএসএসডি [29779]: মিলছে আরএসএ কী: d8: d5: f3: 5a: 7e: 27: 42: 91: e6: a5: e6: 9e: f9: fd: d3: ce
জুন 24 22:43:42 লোকালহোস্ট এসএসএসডি [29779]: 127.0.0.1 বন্দর 59630 ssh2 থেকে কালেবের জন্য অনুমোদিত পোলককি

থেকে man sshd_config:

   LogLevel
          Gives  the  verbosity  level that is used when logging messages from
          sshd(8).  The possible values are: QUIET, FATAL, ERROR,  INFO,  VER-
          BOSE,  DEBUG,  DEBUG1,  DEBUG2,  and  DEBUG3.   The default is INFO.
          DEBUG and DEBUG1 are equivalent.  DEBUG2  and  DEBUG3  each  specify
          higher  levels of debugging output.  Logging with a DEBUG level vio-
          lates the privacy of users and is not recommended.

আশাব্যঞ্জক মনে হচ্ছে। এরপরে আঙুলের ছাপটি আমাকে জানায় কোন কী ব্যবহার করা হয়েছে। দুর্দান্ত, ধন্যবাদ
লুপ স্পেস

বর্তমান সেশনের ফিঙ্গারপ্রিন্ট মুদ্রণের জন্য:sed -ne "/sshd.$PPID.:.*matching DSA key/{s/^.* //g;p;q}" /var/log/auth.log
এফ। হুরি

আমি জিএনইউ পছন্দ করি sed!
এফ। হাউরি

3
@ এফ.হৌরি, যদি আমি কিছু মিস করছি না, যদি পিআইডি দ্বিতীয় এসএসএইচ অধিবেশনটির জন্য পুনরায় ব্যবহার করা হয় তবে কী ভুল জিনিসটি ফিরে আসবে না? দেখে মনে হচ্ছে এটি সর্বদা সর্বশেষতমের পরিবর্তে auth.log এ প্রদত্ত পিআইডি-র জন্য প্রারম্ভিক ফিঙ্গারপ্রিন্টটি ফিরিয়ে দেবে।
গডলিজিক

@ গুডলিজেক ওহ হ্যাঁ! আমি whipe ভাল আছে qনির্দেশক, ফাইল শেষ না হওয়া পর্যন্ত দোকান লাইন ... কিন্তু লাইন হয়ে নিন: sed -ne "/sshd.$PPID.:.*matching DSA key/{s/^.* //g;h};\${x;p}" /var/log/auth.log। অবশ্যই: আমি ভালবাসি!
এফ। হাউরি

15

@ ব্যবহারকারী 37161 এর উত্তরের সাথে কিছুটা মিল । যদি ভাগ করা অ্যাকাউন্টটি একটি কাস্টম শেল চালাচ্ছে এবং শেলটি সেখানে কী ব্যবহারকারীর রয়েছে তা জানতে হবে, তবে "র‌্যাপার" স্ক্রিপ্টটি চালানো যথেষ্ট নয়, যেহেতু কাস্টম শেলটিতে তথ্য দৌড়ের কারণ হতে পারে এমন পদ্ধতি ছাড়াই প্রবেশ করা হয়নি isn't শর্ত।

পরিবর্তে আপনি environment=এনভায়রনমেন্ট ভেরিয়েবল সেট করার জন্য অনুমোদিত_কিগুলি ফাইলের বিকল্পটি ব্যবহার করতে পারেন , যা কাস্টম শেলটি পরে পড়তে পারে।

আপনার .ssh/authorized_keysফাইলের অভ্যন্তরে , প্রতিটি লাইনের সাথে পরিবেশের ভেরিয়েবল সেটটি অন্তর্ভুক্ত করুন, যেমন:

environment="REMOTEUSER=jrhacker" ssh-rsa ....
environment="REMOTEUSER=jbloggs" ssh-rsa ....

তারপরে কাস্টম শেল বা বিভিন্ন আরসি স্ক্রিপ্টগুলির মধ্যে যে কোনওটি $REMOTEUSERভেরিয়েবলটি পড়তে এবং উপযুক্ত পদক্ষেপ নিতে পারে।

তবে নোট করুন যে আপনি যদি একটি স্ট্যান্ডার্ড শেল ব্যবহার করেন তবে লগ-ইন করা ব্যবহারকারী বিভিন্ন জিনিসকে ব্যর্থ করার জন্য ফাইলটি পরিবর্তন করতে সক্ষম। এছাড়াও, ব্যবহারকারীরা যেমন পরিবেশের ভেরিয়েবল সেট করার অনুমতি দেয় সেখানে কিছু ঝুঁকি রয়েছে LDPRELOADsshd_configসম্পর্কে ডকুমেন্টেশন দেখুন PermitUserEnvironment


13

লগ ফর্ম্যাট সম্পর্কে 2016-10-31 আপগ্রেড করুন

সঠিক ইনস্টলেশন জন্য কিছু স্ক্রিপ্ট

ব্যবহারকারীর ব্যবহারে এক্সপেনশন সহ কী দ্বারা এসএসএস সংযোগগুলি ট্র্যাক / লগ করার জন্য একটি সম্পূর্ণ ব্যবহারযোগ্য পদ্ধতি রয়েছে।

ভূমিকা

@ কালেবের অ্যানোভার ছাড়াও, আমি সেখানে কিছু ছোট কৌশল ভাগ করতে চাই:

নোটা: আমি দেবিয়ান 6.0 এ কাজ করছি

সার্ভার ইনস্টলেশন

এসএসএইচডি লগ স্তর

প্রথমে সার্ভার কনফিগারেশনে পর্যাপ্ত লগিং স্তর রয়েছে তা নিশ্চিত করে:

রুট হিসাবে, এটি সেট করবে এবং সক্রিয় ভার্বোস লগইন:

sed '/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{s/^/# /;h;s/$/\nLogLevel VERBOSE/};${p;g;/./!{iLogLevel VERBOSE'$'\n;};D}'  -i /etc/ssh/sshd_config

লেখা যেতে পারে:

sed '
     /^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
        s/^/# /;
        h;
        s/$/\nLogLevel VERBOSE/
    };
    ${
        p;
        g;
        /./!{
            iLogLevel VERBOSE
        };
        D
    }'  -i /etc/ssh/sshd_config

বা একটি উপলিপি স্ক্রিপ্টে :

#!/bin/sed -f
/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
    s/^/# /;
    h;
    s/$/\nLogLevel VERBOSE/
};
${
    p;
    g;
    /./!{
        iLogLevel VERBOSE
    };
    D
}

যা এই হিসাবে চালানো যেতে পারে:

patchSshdConfigLogLevel.sed -i /etc/ssh/sshd_config

এটি সক্রিয় করার চেয়ে :

service ssh restart

সিসলগ: আঙুলের ছাপ ব্যবহারকারীর পাঠযোগ্য making

এখন ব্যবহারকারী পঠনযোগ্য ফাইলে আঙুলের ছাপ নিন:

echo ':msg, regex, "Found matching .* key:" -/var/log/sshdusers.log' \
    > /etc/rsyslog.d/ssh_key_user.conf 
echo ':msg, regex, "Accepted publickey for" -/var/log/sshdusers.log' \
    >> /etc/rsyslog.d/ssh_key_user.conf 

service rsyslog restart

sshdusers.logএরপরে নতুন ফাইল তৈরি হয়েছে (এবং কোনও কিছু রয়েছে) তা নিশ্চিত করতে ssh থেকে লগইন করতে (পুনরায়) চেষ্টা করুন

chmod 644 /var/log/sshdusers.log

ব্যবহার

এটি বর্তমান সেশনের ফিঙ্গারপ্রিন্ট মুদ্রণ করবে:

sed -ne "/sshd.$PPID.:.*matching .SA key/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log

sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log

জন্য প্লাগ-ইন .bashrc

এবং অবশেষে, আপনার বা ব্যবহারকারীর শেষে কিছুটা অ্যাড-অন রয়েছে :/etc/bash.bashrc.bashrc

ssh_oPwd=$OLDPWD
ssh_oUmask=$(umask)
umask 077
ssh_tempdir=$(mktemp -d /tmp/ssh-id-XXXXXXX)
cd $ssh_tempdir || exit 1

ssh_crtFp=$(
    sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
)
for ((ssh_i=1;ssh_i<=$(wc -l <$HOME/.ssh/authorized_keys);ssh_i++));do
    export ssh_line="$(sed -ne ${ssh_i}p <$HOME/.ssh/authorized_keys)"
    echo "$ssh_line" >tempKey
    export ssh_lFp=($(ssh-keygen -l -f tempKey))
    if [ "${ssh_lFp[1]}" == "$ssh_crtFp" ] ;then
        export SSH_KEY_USER=${ssh_line##* }
        break
      fi
  done

cd $OLDPWD
OLDPWD=$ssh_oPwd
rm -fR $ssh_tempdir
umask $ssh_oUmask
unset ssh_lFp ssh_line ssh_i ssh_crtFp ssh_tempdir ssh_oUmask ssh_oPwd

সুতরাং এসএসএইচ থেকে পুনরায় লগইন করার পরে, আপনি দেখতে পাবেন:

set | grep ^SSH
SSH_CLIENT='192.168.1.31 43734 22'
SSH_CONNECTION='192.168.1.31 43734 192.168.1.2 22'
SSH_KEY_USER=user@mydesk
SSH_TTY=/dev/pts/2

নোটা কিছু ইনস্টলেশনে, অনুমোদিত কী ফাইলটি হয়ত আলাদাভাবে নামকরণ করে, যেমন $HOME/.ssh/authorized_keys2...


এটি প্রকাশিত হওয়ার সময় আমি জিএনইউ / লিনাক্স দেবিয়ান 6 এর অধীনে ছিলাম , তবে এটি ডিবিয়ান 7 এর অধীনে এই কাজটি ...
এফ হৌরি


লগ ফর্ম্যাট পরিবর্তনের কারণে আপগ্রেড করা হয়েছে
এফ হাউরি

খুশী হলাম। আপনার প্যাচশডকনফিগলগলিভেলস.সেসডের শেষে ".sed" থাকা উচিত নয়, কারণ এটি অকারণে একটি বাস্তবায়ন বিশদটি প্রকাশ করে। দ্য #! লাইন সম্পূর্ণরূপে যথেষ্ট।
অ্যালেক্স উত্তর-কীগুলি

ইউএন * এক্স এর অধীনে @ অ্যালেক্সনর্থ-কীগুলির এক্সটেনশনগুলি জেনারেলভাবে প্রযুক্তিহীন হ'ল আমরা মাইম ব্যবহার এবং ফাইলের প্রকারগুলি জানার জন্য পছন্দ করি । কিন্তু মানুষের যে ব্যক্তি ফাইল সিস্টেম ব্রাউজ মত এক্সটেনশন থাকার , , , , , , অথবা এমনকি দরকারী হয়! file.pl.py.sh.awk.sed.tar.gz.png.b64.gz
এফ। হাউরি

8

মনে করুন যে "জো" এবং "দেব" ব্যবহারকারীদের "এক্স" অ্যাকাউন্টে অ্যাক্সেস রয়েছে। তারপরে এক্স অ্যাকাউন্টে .ssh_authorized_keysআপনি লাইনগুলি যুক্ত করুন:

command='wrapper joe' joe public key
command='wrapper deb' deb public key

এছাড়াও মোড়ক স্ক্রিপ্টে আপনি যে কোনও কিছু করতে পারেন, জো-র ব্যক্তিগত কীটি sshনির্দিষ্ট তারিখ এবং সময় ব্যবহার করে কমান্ড দিয়ে যাচ্ছিল তা লগইন করুন $ORIGINAL_COMMAND


3

ফেডোরা 20+-এ লগইন প্রচেষ্টা এবং সাফল্যগুলি /var/log/audit/audit.log এ সংরক্ষণ করা হয়। এই লগ লগইন প্রচেষ্টা (ব্যর্থতা এবং সাফল্য) সংরক্ষণ করে, এবং লগইন প্রচেষ্টা করার জন্য ব্যবহৃত কী ফিঙ্গারপ্রিন্ট fp নামক ক্ষেত্রে সংরক্ষণ করা হয়।

আপনি লগইন করা কী ফিঙ্গারপ্রিন্টকে ssh-keygen -l এর মাধ্যমে রেখায় রেখার মাধ্যমে অনুমোদিত_কিগুলিতে আঙুলের ছাপগুলির সাথে তুলনা করতে পারেন

এসএসএস লগিন এবং তাদের সুরক্ষা এবং অনুপ্রবেশ সনাক্তকরণ সম্পর্কিত একটি বিশদ বিবরণ এখানে: http://vpathak.tumblr.com/post/121343814158/fedora-audit-log-with-love-from-russia


2

আপনি এটি চেষ্টা করতে পারেন:

ssh-add -L | awk '{ print $2 }' | xargs -i grep '{}' ~/.ssh/authorized_keys  | head -1

যুক্তিযুক্তভাবে আরও সুনির্দিষ্ট এবং কম সিপিইউ নিবিড়:ssh-add -L | awk 'NR==FNR { k=$2;next } /^#/{next} $2==k { print $3;exit} $3==k {print $4;exit} ' - ~/.ssh/authorized_keys
শে

0

@F ছাড়াও। হাউরি উত্তর, আমি দরকারী "লগডইন প্রম্পট" প্রস্তুত।

একটি অতিরিক্ত ফাইল alচ্ছিক (OME হোম / .ssh / ব্যবহারকারীগণ):

kszumny@laptop kszumny
kszumny@comp2 kszumny
tom@laptop tom
pati@home
chris@workstation1 chris
chris@workstation2 chris

এই অংশটি /etc/profile(সমস্ত ব্যবহারকারীর জন্য) বা এতে আটকানো উচিত~/.bashrc

other_users_prompt()
{
    pids=`ps fx | grep "sshd:\s" | awk '{print $1}'`
    users=""
    for uid in $pids
    do
        ssh_crtFp=`sed -ne "/sshd.$uid.:.*matching .SA key/{s/^.* //g;p;q}" /var/log/sshdusers.log`
        for ((ssh_i=1;ssh_i<=$(wc -l <$HOME/.ssh/authorized_keys);ssh_i++));do
            export ssh_line="$(sed -ne ${ssh_i}p <$HOME/.ssh/authorized_keys)"
            echo "$ssh_line" >tempKey
            export ssh_lFp=($(ssh-keygen -l -f tempKey))
            if [ "${ssh_lFp[1]}" == "$ssh_crtFp" ] ;then
                export SSH_KEY_USER=${ssh_line##* }
                ST_USER=`cat $HOME/.ssh/users | grep "${SSH_KEY_USER}" | awk '{print $2}'`
                if [ -z "$ST_USER" ]; then
                    ST_USER=$SSH_KEY_USER
                fi
                if [ -z "$users" ]; then
                    users="$ST_USER"
                else
                    users="$users\n$ST_USER"
                fi
                break
            fi
        done
    done

    if [ `echo -e "$users" | sort | uniq -c | wc -l` == 1  ]; then
       exit
    fi

    users=`echo -e "$users" | sort | uniq -c | awk '{print $2"("$1")"}' | xargs echo -e`
    echo -e "[LoggedIn:$users] "

}

PS1='$(other_users_prompt)\u@\h:\w\$ '

ফলাফল

এখানে চিত্র বর্ণনা লিখুন

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