सभी जुड़े एसएसएच सत्रों की सूची बनाएं?


183

मैं बस जड़ में SSH'd, और फिर SSH एक ही मशीन पर जड़ में फिर से होगा। इसलिए मेरे पास दो विंडो हैं जो मेरे रिमोट मशीन पर SSH'd दोनों को खोलती हैं।

शेल से, मैं इन दो सत्रों की सूची कैसे देख सकता हूं?

जवाबों:


188

whoया w; who -aअतिरिक्त जानकारी के लिए।

ये कमांड बस एक टर्मिनल डिवाइस पर सभी लॉगिन सत्र दिखाते हैं। एक एसएसएच सत्र एक छद्म-टर्मिनल दास ( pts) पर होगा जैसा कि TTYकॉलम में दिखाया गया है , लेकिन सभी पीटीएस कनेक्शन एसएचओ सत्र नहीं हैं। उदाहरण के लिए, प्रोग्राम जो एक छद्म टर्मिनल डिवाइस बनाते हैं जैसे कि xtermया जैसा screenकि दिखाएगा pts। स्तंभ में पाए जाने वाले विभिन्न मूल्यों के बेहतर विवरण के लिए पीटी और ट्टी के बीच अंतर देखें TTY। इसके अलावा, यह दृष्टिकोण किसी को भी नहीं दिखाएगा जो एसएफटीपी सत्र में लॉग इन हुआ है, क्योंकि एसएफटीपी सत्रों में प्रवेश सत्र नहीं हैं।

मुझे सभी SSH सत्रों को स्पष्ट रूप से दिखाने का कोई तरीका नहीं पता है। आप से प्रवेश जानकारी को पढ़ कर इस जानकारी का अनुमान कर सकते हैं utmp/ wtmpएक उपकरण के माध्यम से की तरह last, wया whoपोर्ट 22 (या पर खुला TCP कनेक्शन जहाँ भी आपकी SSH को खोजने के लिए की तरह मैं सिर्फ का वर्णन किया है, या उनके जवाब में वर्णित @sebelk तरह नेटवर्किंग टूल का प्रयोग करके डेमन (एस) है / सुन रहे हैं)।

तीसरा तरीका जो आप ले सकते हैं वह है एसएसएच डेमॉन से लॉग आउटपुट को पार्स करना। आपके OS वितरण, SSH वितरण, कॉन्फ़िगरेशन, और इसी तरह, आपके लॉग आउटपुट विभिन्न स्थानों पर हो सकते हैं। आरएचईएल 6 बॉक्स पर, मुझे लॉग इन मिला /var/log/sshd.log। आरएचईएल 7 बॉक्स पर, और आर्क लिनक्स बॉक्स पर भी, मुझे journalctl -u sshdलॉग देखने के लिए उपयोग करने की आवश्यकता है । कुछ सिस्टम SSH लॉग को syslog में आउटपुट कर सकते हैं। आपके लॉग इन स्थानों या अन्य जगहों पर हो सकते हैं। यहाँ एक नमूना है जो आप देख सकते हैं:

[myhost ~]% cat /var/log/sshd.log | grep hendrenj | grep session
May  1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May  5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj

लॉग तब दिखाई देते हैं जब सत्र खुले और बंद होते हैं, सत्र किसका है, जहां उपयोगकर्ता से कनेक्ट हो रहा है, और बहुत कुछ। हालाँकि, यदि आप इसे सरल, मानव-पढ़ने योग्य लॉग इन इवेंट्स से वर्तमान में सक्रिय सत्रों की सूची में लाना चाहते हैं, तो आपको बहुत कुछ करना होगा, और यह तब भी सटीक सूची नहीं होगी जब आपने पार्स किया है, क्योंकि लॉग में वास्तव में यह निर्धारित करने के लिए पर्याप्त जानकारी नहीं है कि कौन से सत्र अभी भी सक्रिय हैं - आप अनिवार्य रूप से सिर्फ अनुमान लगा रहे हैं। इन लॉग्स का उपयोग करने से आपको एकमात्र लाभ यह है कि यह जानकारी अन्य तरीकों की तरह सेकंडहैंड स्रोत के माध्यम से सीधे SSHD से आती है।

मैं सिर्फ उपयोग करने की सलाह देता हूं w। ज्यादातर समय, यह आपको वह जानकारी मिलेगी जो आप चाहते हैं।



एक मूर्त रूप से संबंधित समस्या के लिए खोज करते समय यह मिला। कोई बात नहीं। यह किसी भी स्टैक साइट पर मैंने देखे गए सबसे अच्छे उत्तरों में से एक है! मैं अब इस विशेष क्षेत्र (बेहतर शब्द की कमी के लिए) के बारे में एक टन अधिक जानता हूं। संपादित करें: धन्यवाद!
jscharf

107

आप निम्न आदेश के साथ हर सत्र ssh देख सकते हैं:

[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp        0      0 192.168.1.136:22            192.168.1.147:45852         ESTABLISHED 1341/sshd           
tcp        0      0 192.168.1.136:22            192.168.1.147:45858         ESTABLISHED 1360/sshd

ओ शायद यह उपयोगी हो सकता है:

[root@router ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: root@pts/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: root@pts/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:

4
धन्यवाद; यह उत्तर शीर्ष उत्तर से बहुत बेहतर है, जो केवल उन उपयोगकर्ताओं को सूचीबद्ध करता है जो शेल में लॉग इन हैं। यह समाधान SFTP उपयोगकर्ताओं को भी ढूंढता है।
हेडन शिफ

1
आजकल ज्यादातर बक्से पर आप उपयोग कर सकते हैंpgrep -ai sshd
ccpizza

@ccpizza: pgrep: invalid option -- 'i'उबंटू 14.04 पर।
मार्टिन श्रोडर

2
@ MartinSchröder: -iकेवल mac / bsd फ्लेवर पर उपलब्ध है। ubuntu पर आप उपयोग कर सकते हैं pgrep -af ssd। देखें serverfault.com/a/883270/116777 जानकारी के लिए
ccpizza

@HaydenSchiff के समान ही मुझे उन उपयोगकर्ताओं को भी ढूंढना था जिनके पास केवल शेल के बिना पोर्ट-फ़ॉरवर्डिंग के लिए एक SSH सुरंग है। इससे मदद मिली!
टोबियास के।


7

सरल संदर्भ के लिए जोड़ा गया।

यदि आप छद्म खोल में हैं (उदाहरण: / dev / pts / 0) सबसे सरल तरीकों में से एक होगा:

[user1@host ~]$ echo $SSH_CONNECTION

इसे वापस आना चाहिए: आपका आईपी और पोर्ट और आईपी आपके से और पोर्ट से जुड़ा हुआ है

192.168.0.13 50473 192.168.0.22 22

आप का उपयोग करके ttyया who( w) से कुछ जानकारी भी प्राप्त कर सकते हैं : (संपादित करें: मुझे लगता है कि यह अब एक और पोस्ट में ऊपर सूची है)

[user1@host ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)

बैश ग्लोबल्स से निपटने के पिछले उत्तरों पर विस्तार करने के लिए। हो सकता है कि मैं SECONDSवैश्विक संदर्भ देने का सुझाव दूं । आप इसका उपयोग कर सकते हैं echo $SECONDS, जिसके बाद यह समय की मात्रा को प्रदर्शित करता है, कथित कनेक्शन के बाद से
NerdOfCode

यह वर्तमान में सक्रिय सत्र के लिए सूचना प्रदर्शित करेगा - वह जो आप टाइप कर रहे हैं। लेकिन सवाल पूछता है कि वर्तमान में जुड़े सभी सत्रों को कैसे सूचीबद्ध किया जाए ।
जी-मैन

6

@ Sebelk के उत्तर पर विस्तार:

उपयोग करने वाला समाधान netstatएक अच्छा है, लेकिन रूट विशेषाधिकारों की आवश्यकता है। इसके अलावा, net-toolsपैकेज (जो प्रदान करता है netstat) को कुछ नए लिनक्स डिस्ट्रो ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-ir-replacements/ ) में अपग्रेड किया गया था ।

एक वैकल्पिक समाधान के लिए प्रतिस्थापन का उपयोग करने के तो है netstat, ss। उदाहरण के लिए (ध्यान दें कि आपको अब रूट की आवश्यकता नहीं है):

user@router:~# ss | grep ssh
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37620                
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37628

2

आप उपयोग कर सकते हैं

last | head

मैंने इसे अपनी .login स्क्रिप्ट में सालों तक यह देखने के लिए इस्तेमाल किया कि किसने हाल ही में सिस्टम में लॉग इन किया था। यह देखने के लिए एक गरीब-आदमी-सुरक्षा उपकरण था कि क्या कोई आपके लॉगिन का उपयोग करके सिस्टम पर था।


1
... लेकिन यह सक्रिय सत्रों की सूची नहीं होगी (यह सवाल क्या है)। लॉगिन गतिविधि के आधार पर, आपके द्वारा चलाए गए सत्र को भी lastसूचीबद्ध नहीं किया जा सकता है।
मुरु

1
"last -p now" सभी वर्तमान ssh सत्रों को सूचीबद्ध करता है।
जॉ विलियम्स

@ जॉवेलियल्स किस संस्करण का lastसमर्थन करता है -p? यह क्या करता है?
mwfearnley

@ mwfearnley संस्करण के "last from util-linux 2.31.1"पास यह सुनिश्चित करने के लिए है।
V.7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.