क्या मुझे पता चल सकता है कि किसी खाते को एक्सेस करने के लिए किस ssh कुंजी का उपयोग किया गया था?


56

क्या यह पता लगाना संभव है कि किसी खाते तक पहुंचने के लिए किस ssh कुंजी का उपयोग किया गया था? मेरा एक सर्वर पर एक खाता है जिसे मैंने कई (विश्वसनीय!) लोगों तक ssh के माध्यम से पहुँचा है। मुझे यह जानना उपयोगी होगा कि कौन लॉग इन और कब हुआ। मेरे पास रूट एक्सेस है इसलिए मैं लॉग को देख सकता हूं, लेकिन वहां कुछ भी नहीं लगता है। क्या कुछ कॉन्फ़िगरेशन स्विच है जो लॉग में कुंजी की पहचान करने का कुछ तरीका डाल देगा?


क्या आपने sshd_config में LogLevel के साथ खेलने की कोशिश की है?
ईटबिटोनी

यह जानने के लिए आश्चर्यजनक रूप से उपयोगी होगा कि वर्तमान सत्र को अधिकृत करने के लिए किस कुंजी का उपयोग किया गया था - मेरे मामले में, एक साझा लॉगिन के माध्यम से एक्सेस किए गए मर्क्यूरियल रिपॉजिटरी पर एक्सेस कंट्रोल के लिए। सभी मौजूदा तकनीकों में कमांड विकल्प के माध्यम से पहचान को फैलाना शामिल है, जो कि थोड़ा क्लंकी है।
टॉम एंडरसन


जवाबों:


38

यदि आप sshd config फाइल (आमतौर पर /etc/ssh/sshd_config) में जाते हैं और LogLevel निर्देश को VERBOSE में बदलते हैं:

LogLevel VERBOSE

... आप लॉग में कुछ इस तरह देख सकते हैं:

24 जून 22:43:42 लोकलहोस्ट sshd [29779]: मिला मिलान RSA कुंजी: d8: d5: f3: 5a: 7e: 27: 42: 91: e6: a6: e6: 9e: f9: fd: d3: ce
Jun 24 22:43:42 लोकलहोस्ट sshd [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
F. Hauri

मुझे GNU पसंद है sed!
एफ। होरी

3
@ F.Hauri, जब तक मुझे कुछ याद नहीं आ रहा है, अगर एक PID का दूसरे SSH सत्र के लिए पुन: उपयोग नहीं किया जाता है, तो क्या वह गलत चीज नहीं लौटाएगा? ऐसा लगता है कि यह हमेशा दिए गए PID के लिए जल्द से जल्द फिंगरप्रिंट लौटाएगा।
गॉडलीजेक

@godlygeek ओह हाँ! मेरे पास qनिर्देश को कोड़ा करने के लिए बेहतर है , फ़ाइल के अंत तक स्टोर लाइन ... sed लाइन बन sed -ne "/sshd.$PPID.:.*matching DSA key/{s/^.* //g;h};\${x;p}" /var/log/auth.log:। निश्चित रूप से: मैं प्यार करता हूँ sed!
एफ। होरी

15

@ User37161 के उत्तर के समान । यदि साझा खाता एक कस्टम शेल चला रहा है और शेल को यह जानने की आवश्यकता है कि उपयोगकर्ता क्या है, तो "रैपर" स्क्रिप्ट को चलाना पर्याप्त नहीं हो सकता है, क्योंकि रेस के कारण हो सकने वाले तरीकों को छोड़कर जानकारी कस्टम शेल में पारित नहीं हुई है शर्तेँ।

इसके बजाय आप environment=पर्यावरण चर सेट करने के लिए अधिकृत_की फाइल में विकल्प का उपयोग कर सकते हैं , जिसे कस्टम शेल तब पढ़ सकते हैं।

अपनी .ssh/authorized_keysफ़ाइल के अंदर , निम्न की तरह, पर्यावरण चर सेट के साथ प्रत्येक पंक्ति को प्रस्तुत करें:

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

फिर कस्टम शेल, या विभिन्न आरसी स्क्रिप्ट में से कोई भी, $REMOTEUSERचर को पढ़ सकता है और उचित कार्रवाई कर सकता है।

हालांकि, ध्यान दें कि यदि आप एक मानक शेल का उपयोग कर रहे हैं, तो लॉग-इन उपयोगकर्ता विभिन्न चीजों को विफल करने के लिए फ़ाइल को संशोधित करने में सक्षम है। इसके अलावा, उपयोगकर्ताओं को पर्यावरण चर जैसे कि सेट करने की अनुमति देने में कुछ जोखिम हैं LDPRELOAD। के sshd_configबारे में प्रलेखन देखें PermitUserEnvironment


13

लॉग प्रारूप के बारे में 2016-10-31 अपग्रेड करें

उचित स्थापना के लिए कुछ स्क्रिप्ट

उपयोगकर्ता नाम को ध्यान में रखते हुए ssh कनेक्शन को ट्रैक / लॉग करने के लिए एक पूर्ण प्रयोग करने योग्य तरीका है।

परिचय

@ कालेब के एवर के अलावा, मैं वहां कुछ छोटी सी ट्रिक्स साझा करना चाहूंगा:

नोट: मैं डेबियन 6.0 पर काम कर रहा हूँ

सर्वर स्थापना

SSHD लॉग स्तर

पहले यह सुनिश्चित करना कि सर्वर कॉन्फ़िगरेशन में पर्याप्त लॉगिंग स्तर है:

जड़ के रूप में, यह क्रिया और लॉगबिन को सक्रिय करेगा:

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

या एक sed स्क्रिप्ट में :

#!/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

Syslog: उपयोगकर्ता को उंगलियों के निशान पढ़ने योग्य बनाना

अब उपयोगकर्ता पठनीय फ़ाइल में उंगलियों के निशान लें:

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

नई फ़ाइल बनाने के लिए ssh से लॉगिन (पुनः) करने की कोशिश करें sshdusers.log(और कुछ शामिल करें), फिर

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

इसलिए SSH से पुनः लॉगिन करने के बाद, आप देखेंगे:

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...


जब यह प्रकाशित हुआ तो मैं GNU / Linux डेबियन 6 के अंतर्गत था , लेकिन डेबियन 7 के तहत यह काम काफी हद तक ...
F. Hauri


लॉग प्रारूप में परिवर्तन के कारण अपग्रेड किया गया
एफ। होरी

अच्छा लगा। आपके पैचशंडकॉन्फ़िग्लॉगलीवैलड को अंत में ".rew" नहीं होना चाहिए, क्योंकि यह अनावश्यक रूप से कार्यान्वयन विवरण को उजागर करेगा। #! लाइन पूरी तरह से पर्याप्त है।
एलेक्स नॉर्थ-कीज

@ UNN * X के तहत एलेक्सनर्थ-की एक्सटेंशन सामान्य रूप से तकनीकी रूप से असमान हैं, क्योंकि हम माइम का उपयोग करना पसंद करते हैं और अन्य प्रकार के फ़ाइल के लिए। लेकिन मानव के लिए के रूप में जो फ़ाइलसिस्टम ब्राउज़ करें, जैसे विस्तार होने , , , , , , या यहाँ तक उपयोगी है! file.pl.py.sh.awk.sed.tar.gz.png.b64.gz
एफ। हौरी

8

मान लीजिए कि उपयोगकर्ता "जो" और "डिब" के पास "x" खाते की पहुंच है। फिर खाता x में .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 के माध्यम से लाइन से इसे चलाकर अधिकृत_कीलों में उंगलियों के निशान से लॉग इन कर सकते हैं।

Ssh logins और उनकी सुरक्षा और घुसपैठ का पता लगाने के संबंध में एक विस्तृत विवरण यहाँ है: 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

इसके अलावा @ एफ। हाउरी जवाब, मैं उपयोगी "लॉग इन प्रॉम्प्ट" तैयार करता हूं।

एक अतिरिक्त फ़ाइल वैकल्पिक है ($ HOME /। 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\$ '

नतीजा

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.