SSH लॉगिन और / या लॉगआउट पर रन (सिस्टम) स्क्रिप्ट


12

जब भी कोई उपयोगकर्ता SSH का उपयोग करने में लॉग इन करता है, तो आदर्श रूप से होस्ट नाम या IP, साथ ही उपयोगकर्ता नाम को पास करने के लिए मैं अपना OpenSSH सर्वर चाहूंगा। इसके अलावा, जब भी कोई सत्र समाप्त होता है (उपयोगकर्ता नाम से गुजरना) तो मुझे स्क्रिप्ट चलाना पसंद है। इन लिपियों को उपयोगकर्ता के सत्र में नहीं चलना चाहिए, लेकिन सिस्टम चौड़ा है।

विचार लॉगिन और लॉगआउट पर ऑडियो चेतावनी देने के लिए है, उदाहरण के लिए espeak, और बाहरी डिस्प्ले पर जानकारी प्रदर्शित करने के लिए।

मैंने देखा है कि एक pam-scriptsपैकेज है, लेकिन मुझे यकीन नहीं है कि यह वही है जो मैं चाहता हूं, और न ही इसका उपयोग कैसे करें।

जवाबों:


10

आप अपने SSH-users पर उनके द्वारा अनुरोध करने के बजाय उन्हें (या उनके शेल को निर्दिष्ट करने पर मजबूर कर सकते हैं यदि वे एक विशिष्ट कमांड नहीं देते हैं)। कुछ इस तरह के साथ कि आदेश निर्दिष्ट करने के द्वारा किया जा सकता है ForceCommand /root/ssh-wrapperमें /etc/ssh/sshd_config(यह बात जहां स्क्रिप्ट नहीं स्थित है करता है या यह कैसे नामित है, सिर्फ यकीन है कि यह सभी उपयोगकर्ताओं और इसे करने के लिए sshd विन्यास फाइल अंकों की निष्पादन योग्य है)। आपको पुनः आरंभ / पुनः लोड करने की भी आवश्यकता है sshdमूल आदेश के लिए सुलभ है आरोपित आदेश के रूप में $SSH_ORIGINAL_COMMAND

मैंने इस स्क्रिप्ट को एक साथ हैक किया है:

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

अब हर बार जब मैं लॉगिन करता हूं या लॉगआउट करता हूं तो एक आवाज मुझे इसके बारे में बताती है, और लॉग एंट्री को सिसलॉग लिखा जाता है। यह कमांड को भी लॉग करता है। आप अपने sshd उपयोग को "फॉलो" करने के लिए निम्न जैसे कुछ का उपयोग कर सकते हैं:

tailf /var/log/syslog | grep ssh-wrapper

कृपया ध्यान दें कि यह स्क्रिप्ट अधिकतर अप्रयुक्त है, इसलिए अपने जोखिम पर उपयोग करें! ;-)

पुनश्च: याद रखें कि यह स्क्रिप्ट उस उपयोगकर्ता के रूप में चलाई जाती है, जिसने लॉग इन किया था, इसलिए यदि आप इसे और अधिक सुविधाओं को जोड़ने के लिए इसे बदलते हैं तो आप वह सब कुछ नहीं कर सकते जो आप चाहते हैं ...


नमस्ते, क्या स्थिति का पता लगाने का कोई तरीका है जब उपयोगकर्ता बस ssh क्लाइंट के साथ विंडो बंद कर देता है। आपकी स्क्रिप्ट इस स्थिति को कम नहीं करती है .. धन्यवाद।
दिमित्री एस्किन

चाहिए shell$ {SSH_ORIGINAL_COMMENT: -shell} में खोल करने के लिए वास्तविक पथ, जैसे के साथ प्रतिस्थापित किया। / bin / bash? जब मैं बस चलाने की कोशिश करता हूं, तो यह शिकायत करता है कि शेल जैसी कोई कमांड नहीं है। असल में, मुझे लगता है कि शायद आपका मतलब क्या $ SHELL है? जो उपयोगकर्ता के निर्दिष्ट शेल को चलाना चाहिए।
इब्राहिम

1

मैंने पहले लॉग फ़ाइल में इस मिलान की घटनाओं को देखा है (जो आपको कुछ भी मिलान करने पर लचीलापन देगा)। यह पृष्ठ खराब स्वरूपित है, लेकिन यह आपको आरंभ करने में मदद कर सकता है: https://help.ubuntu.com/community/AudibleLogs#Play esound के साथ


मुझे लगता है कि आप / वे espeakइसके बजाय मतलब है esound?
JanC

0

( सर्वरफ़ॉल्ट पर एक ही सवाल से उत्तर-पोस्ट किया गया )

बस एक स्क्रिप्ट लिखें जो आप चाहते हैं और फिर इसे अपनी आवश्यकताओं के आधार पर /etc/profileया संभवतः इसमें चिपका दें /etc/bash.bashrc। उन फ़ाइलों में परिवर्तन सभी उपयोगकर्ताओं पर लागू होगा। मुझे यकीन नहीं है कि आप इस दृष्टिकोण के साथ लॉगआउट पर कैसे सूचित करेंगे, हालांकि।

वैकल्पिक रूप से, ऐसा करने का एक और तरीका /var/log/authनए (और समापन) ssh सत्रों के लिए एक सरल डेमॉन मॉनिटरिंग होगा । इस तरह यह लॉगिन और लॉगआउट दोनों पर सूचनाएं भेजने में सक्षम होगा।


0

आप sshrc (मैन sshd, sshrc की खोज) का उपयोग कर सकते हैं

ssh / etc / ssh / sshrc निष्पादित करेगा यदि यह मौजूद है और आप एक स्क्रिप्ट (या एकाधिक स्क्रिप्ट को कॉल कर सकते हैं)

आप $USERआईपी ​​के माध्यम से किसी भी बैश वैरिएबल को कॉल या लाइक कर सकते हैं

read -d " " ip <<< $SSH_CONNECTION

आप कभी भी अपनी इच्छानुसार परीक्षण या लॉग इन करने के लिए एक स्क्रिप्ट लिख सकते हैं।

लॉगआउट स्क्रिप्ट ... ठीक है, वही मैं खोज रहा हूँ! : डी


0

मुझे लगता है कि PAM सबसे अच्छा विकल्प है। यह सिस्टम-वाइड है और इसे उपयोगकर्ता की कॉन्फिग फाइलों से अधिभूत नहीं किया जा सकता है।

आप इन चरणों का पालन कर सकते हैं। उन्होंने मेरे लिए Ubuntu 14.04.4 LTS पर काम किया।

Daud:

$ sudo pico /opt/custom/bin/info-session.sh

उस खाली फ़ाइल को संपादित करें और इन पंक्तियों को जोड़ें:

#!/bin/sh

[ "$PAM_TYPE" = "open_session" ] || exit 0

INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.

echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.

exit 0

उसके बाद, स्क्रिप्ट को निष्पादित करने की अनुमति दें:

$ sudo chmod ugo+x /opt/custom/bin/info-session.sh

अब, भागो:

$ sudo pico /etc/pam.d/common-session

फ़ाइल के अंत में इन पंक्तियों को जोड़ें:

# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh

किसी भी सेवा को पुनरारंभ करने की कोई आवश्यकता नहीं है। ध्यान दें कि यह स्क्रिप्ट तब भी चलेगी जब कोई उपयोगकर्ता SSH के बजाय टर्मिनल से लॉग इन करेगा।

नोट 1: आप espeakअपनी आवश्यकताओं (ईमेल, पुश अधिसूचना, और इसी तरह ...) पर फिट बैठ सकते हैं। यदि आप उपयोग करते हैं writeऔर उपयोगकर्ता लॉग इन है, तो वह सीधे अपने टर्मिनल पर आउटपुट संदेश देखेगा।

संदर्भ:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands.on -उपयोगकर्ता लॉगिन/

संबंधित:
जब ssh लॉगिन सफल होता है तो मैं ईमेल अलर्ट कैसे सेट कर सकता हूं?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
https://serverfree.com/questions / 395,393 / ईमेल--सूचना के बारे में-प्रत्येक-ssh-कनेक्शन करने के लिए लिनक्स सर्वर

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