मैं उन सभी दूरस्थ कमांडों का एक स्थानीय, टाइमस्टैम्पड रिकॉर्ड रख सकता हूं, जिनका उपयोग मैं करता हूं ssh
(कमांड-लाइन ओपनशश क्लाइंट के माध्यम से शुरू किया गया है bash
)?
आवश्यकताएँ:
आवश्यक:
- सर्वर लॉगिंग पर भरोसा किए बिना 100% क्लाइंट-साइड
- उपयोगकर्ता के घर निर्देशिका में संग्रहीत लॉग के साथ प्रति उपयोगकर्ता कॉन्फ़िगर या स्थापित।
- विभिन्न उपयोगकर्ताओं और मेजबानों के साथ एक साथ कई सत्रों में अंतर करने के लिए समर्थन।
- गैर-घुसपैठ (प्रत्येक बार इसे सक्रिय करने की आवश्यकता नहीं है और ssh का उपयोग करने में महत्वपूर्ण हस्तक्षेप नहीं करता है)
उच्च प्राथमिकता:
- जितना संभव हो उतना आउटपुट लॉग या फ़िल्टर नहीं किया जाता है
- या तो पासवर्ड प्रविष्टियों को लॉग नहीं किया जाता है या फ़ाइल एन्क्रिप्ट की जाती है
- उपयोग किए गए वास्तविक आदेशों को इंगित करता है (टैब / इतिहास पूरा होने के बाद, बैकस्पेस, CTRL+ C, आदि ... संसाधित किया गया है)
अच्छा लगा:
- जंजीर सत्रों में कमांड भी लॉग करता है (रिमोट
ssh
याsu <user>
सेशन के दौरान दर्ज कमांड ) - सत्र प्रारंभ और समाप्ति लॉग होना चाहिए
- एक सरल-
bash
आधारित, गैर-रूट समाधान सबसे अच्छा होगा (शायद कमांड के लिए एकalias
याbash
आवरण स्क्रिप्टssh
?)
- जंजीर सत्रों में कमांड भी लॉग करता है (रिमोट
मेरा कौशल स्तर:
- मैं प्रोग्रामिंग के लिए नया नहीं हूं, लेकिन मैं अभी भी सीख रहा हूं
bash
और "लिनक्स तरीका", इसलिए संक्षिप्त स्पष्टीकरण वाले कोड नमूने सबसे अधिक सराहे जाएंगे।
संभव रणनीतियाँ
- keylogger - समस्या: पासवर्ड लॉग करता है, टैब / इतिहास पूरा नहीं करता है ( ग्लेन का जवाब देखें )
screen
स्क्रॉलबैक डंपिंग के साथ प्रति सेकंड एक बार औरdiff
उनके बीच नई स्क्रॉलबैक लाइनें ढूंढने के लिए - समस्या: इसे एक उपयोगी स्वचालित तरीके से कैसे लागू किया जा सकता है?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- समस्या: जंजीरों वाले सत्रों में बहुस्तरीय आदेशों या इतिहास को संभाल नहीं सकता है, सावधानीपूर्वक सफाई की आवश्यकता है (मेरा उत्तर देखें)- उपरोक्त में से कुछ का संयोजन
एक उदाहरण
निम्नलिखित SSH सत्र:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
~/logs/ssh.log
इस तरह एक लॉग में परिणाम हो सकता है :
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
या, शायद प्रत्येक सत्र के लिए कमांड लाइन के साथ एक अलग लॉग बनाया जाएगा जिसका उपयोग फ़ाइल के शीर्ष पर सत्र शुरू करने के लिए किया जाता है।