2012-10-08 12 views
9

मैं एक quesiton है कि मुझे पहेली है और मुझे आश्चर्य है अगर किसी को भी निम्नलिखित प्राप्त करने के लिए कोशिश की है:एक विशेष मेजबान से SSH के माध्यम से जब उपयोगकर्ता में लॉग क्रिया

मान लेते हैं कि यह मेरा आखिरी 'का परिणाम है चलो एक लिनक्स वातावरण में आदेश:

root pts/1  192.168.1.10  Wed Feb 10 07:04 - 07:57 (00:52) 
root pts/2       Tue Feb 9 22:00 - 00:13 (02:13) 

कैसे कर सकते हैं मैं सेटअप एक विशेष कार्य (जैसे कि उदाहरण के लिए एक संशोधित MOTD या एक ईमेल भेजने के लिए) अगर 'जड़' उपयोगकर्ता 192.168.1.10 से में लॉग इन किया है। क्या इस जानकारी को कैप्चर करने का कोई तरीका है?

mary pts/1  192.168.1.10  Wed Feb 10 07:04 - 07:57 (00:52) 
bob pts/2       Tue Feb 9 22:00 - 00:13 (02:13)  

अब मैं उपयोगकर्ता नाम अगर कोई कार्रवाई करने के लिए करना चाहते हैं: यानी अगर मैं निम्नलिखित है -

इस सवाल का दूसरा हिस्सा है कि मैं कैसे कर सकते हैं थोड़ा और अधिक मजबूत जाँच से ऊपर है 'मैरी' के बराबर है और मेजबान 1 9 2.168.1.10 है।

किसी भी सुझाव का स्वागत है।

अग्रिम धन्यवाद।

उत्तर

1

धन्यवाद:

#!/bin/bash 

[email protected] 
monitored_user=root 
monitored_ip=x.x.x.x 

hostname=$(hostname) 

# add a welcome message: 
printf >&2 "\nWelcome on $hostname $USER\n" 

read -d " " ip <<< $SSH_CONNECTION 

[[ $ip == $monitored_ip && $USER == $monitored_user ]] || exit 0 

date=$(date "+%d.%m.%Y %Hh%M") 
reverse=$(dig -x $ip +short) 

mail -s "Connexion of $USER on $hostname" $mail <<EOF 

IP: $ip 
Reverse: $reverse 
Date: $date 
EOF 

एक फ़ाइल में इस स्क्रिप्ट रखो, तो स्क्रिप्ट का पूरा पथ /etc/ssh/sshrc

में डाल man ssh में। आखिर में मैंने एक ऐसा समाधान ढूंढने में कामयाब रहा जो समय के लिए काम करता है लेकिन इसमें एक दोष है जिसे मैं एक मिनट में बताऊंगा।

मैं अपने/etc/bashrc फ़ाइल (या जो कुछ भी /etc/bash.bashrc वातावरण आप उपयोग कर रहे) के लिए निम्न जोड़ लिया है:

HOST="192.168.0.1" 
RHOST=`who am i | sed -n 's/.*(\([^) ]*\).*/\1/p; 1q'` 
if [ "$RHOST" == "$HOST" ]; then 
     echo "SAY WHAT!" 
     #add further actions here if needed 
fi 

दोष है कि मैं के बारे में पहले बात कर रहा था हो सकता है वास्तव में नहीं एक दोष हो। यदि आप पहले से ही सिस्टम में एसएसएच-एड हैं, और आप एक ही आईपी पर रहने वाले होस्ट को एसएसएच करना चाहते हैं, तो ssh [email protected]who am i कहें तो 'अपना-होस्ट' प्रिंट करें, लेकिन मुझे लगता है कि यह वही होना चाहिए।

यह कहने की जरूरत नहीं है कि उपरोक्त sed कथन संशोधित किया जा सकता है ताकि आप उपयोगकर्ता नाम को भी कैप्चर कर सकें, और आप अपनी आवश्यकताओं को पूरा करने के लिए if/else कथन बढ़ा सकते हैं।

आपके सभी उत्तरों के लिए फिर से धन्यवाद।

+0

क्या आपने मेरी 'sshrc' फ़ाइल का परीक्षण किया है? =) –

+0

मुझे आपके समाधान के साथ-साथ स्पुतनिक पसंद है, धन्यवाद! :) – Tamas

+0

हाय स्पुतनिक। हम स्तर 2 तक पहुंच रहे हैं :) क्या आप cronjobs/कोड के टुकड़ों से आने वाले एसएसएच कमांड लॉगिंग को बाहर करने का तरीका जानते हैं। मुझे केवल कंसोल से उपयोगकर्ता लॉगिन में दिलचस्पी है। धन्यवाद। – Tamas

0

एक तरीका यह एक सरल स्क्रिप्ट समय-समय पर चलाने के लिए किया जाएगा:

#!/bin/bash 
users=$(last | sed -ne '/192\.168\.1\.10/ s/\([^ ]*\).*/\1/p') 
for user in $users; do 
    sendmail "$user" < email.txt 
done 

यह पाइप उपयोगकर्ता सूची निकालने और यह चर $users में बचाने के लिए sed में पिछले आदेश होगा। Sed कमांड -n ध्वज का उपयोग करता है, इसलिए यह केवल प्रिंट करता है जिसे हम इसे बताते हैं। सबसे पहले, हम /192\.168\.1\.10/ "पता" के साथ निर्दिष्ट आईपी वाले लाइनों का चयन करते हैं। उन पंक्तियों पर, हम अंतरिक्ष से पहले वर्ण निकालने का प्रयास करते हैं, और यदि हम सफल होते हैं तो हम परिणाम प्रिंट करते हैं।

फिर, हम $users चर के माध्यम से लूप कर सकते हैं और तदनुसार कार्य कर सकते हैं।

इसे बार-बार कॉल करने का एक तरीका क्रॉन के माध्यम से होगा, और while true; do ./my_script.bash; sleep 60; done करने का एक आसान तरीका होगा।

+0

री क्रॉन बनाम, इसके बजाय/var/log/wtmp में परिवर्तनों का पता लगाने के लिए inotifywait का उपयोग करें। –

+0

धन्यवाद जेनिटो। मुझे लगता है कि कुछ और "इंटरैक्टिव" होना चाहिए। मेरी सोच यह है कि अगर किसी व्यक्ति को एसएसएच-एस सर्वर में एक बार मूल्य के साथ अपडेट किया जाता है, तो उसी जानकारी को कैद किया जा सकता है और फिर /etc/bash.bashrc फ़ाइल में डाल दिया जाता है, इसलिए इसे लॉगिन पर कॉल किया जाएगा। – Tamas

0

आप /etc/profile या समकक्ष में कुछ जोड़ सकते हैं जो $SSH_CLIENT के मान के आधार पर कुछ करता है।

0

ऐसा लगता है कि आप last का उपयोग कर रहे हैं क्योंकि यह डिफ़ॉल्ट रूप से /var/log/wtmp पढ़ता है जो कि लॉगिन का रिकॉर्ड है। who कमांड आपको एक ही फाइल को पढ़ने की अनुमति देता है लेकिन आपकी आवश्यकताओं के लिए एक इंटरफ़ेस के साथ।

उदाहरण के लिए:

$ who --ips /var/log/wtmp | grep '^msw.*127.0.0.1' 
msw  pts/2  2012-10-07 15:52 127.0.0.1 
msw  pts/3  2012-10-07 15:55 127.0.0.1 

जहां उन सत्रों में से कोई भी सक्रिय है, बल्कि ऐतिहासिक थे और लॉग इन किया।

15

एक विशेष फ़ाइल /etc/ssh/sshrc है जहां आप कुछ आदेश डाल सकते हैं जो प्रत्येक बार ssh से कनेक्ट होते हैं।मैं ने लिखा है कि आप के लिए: अपने सभी उत्तरों के लिए

/etc/ssh/sshrc : Commands in this file are executed by ssh when the user logs in, just before the user's shell (or command) is started. See the sshd(8) manual page for more information.

+0

इस स्क्रिप्ट को एक फ़ाइल में रखें, फिर स्क्रिप्ट का पूरा पथ '/ etc/ssh/sshrc' में रखें, क्योंकि sshrc फ़ाइल बैश परीक्षणों को संभाल नहीं पाती है। पोस्ट तदनुसार संपादित किया गया। –

+1

मेरे पास "सिंटेक्स त्रुटि: पुनर्निर्देशन अप्रत्याशित" है। रेखा 12. – Sergey

+0

मुझे @ सर्गी के समान समस्या मिलती है। इसके अलावा, यह '[['' जैसा प्रतीत नहीं होता है। मैंने स्क्रिप्ट के भीतर '$ SHELL 'echo की कोशिश की ताकि यह पुष्टि हो सके कि यह बाश था। एफडब्ल्यूआईडब्ल्यू '[' काम करता है। ओह, और 'dig' स्थापित नहीं है। – Sparhawk

0

ubuntu में मैं

/etc/profile.d 

में एक स्क्रिप्ट रख दिया और जब कोई (उपयोगकर्ता ssh) में प्रवेश करें, यह मेरे मेल करने के लिए एक ईमेल भेजने के

#/etc/profile.d/run_on_loggin.sh 
echo $(who i am) | mail -s 'SSH Login Notification' [email protected] 

मैं के साथ एक php फ़ाइल बनाना चाहते smtp, मुझे मेरी मेल के साथ ईमेल भेजने के लिए ... कुछ समय स्पैम में सहेजा हॉटमेल ...

अगर मैं php फ़ाइल है मैं this तरह चलेंगे ...

अगर मैं this तरह php रन दायर करने के लिए वर पास करना चाहते हैं ...

बहाना मेरी अंग्रेजी: 3

ध्यान दें: मुझे लगता है कि उपयोगकर्ता से इस आदेश को चलाने के लिए, यदि उपयोगकर्ता doen't ध्यान से हो कुछ कमांड का उपयोग करने या ईमेल भेजने की अनुमति है।

संबंधित मुद्दे