समाप्त SSH सत्रों को छोड़ दिया


47

मेरे SSH सत्र गिरते हुए प्रतीत होते हैं, हालांकि यह मेरी बड़ी समस्या नहीं है - बड़ी समस्या यह है कि मेरे पिछले सत्र अभी भी जीवित हैं, बदतर अभी तक उनमें से एक visudoमुझे पहुँचने से रोक रहा है!

who मेरे वर्तमान एक को छोड़कर सभी सत्रों को दिखाता है, जिन्हें मैं जानता हूं कि वे डिस्कनेक्ट हो चुके हैं, मैं अपने संसाधनों को जारी करने वाले पुराने लोगों को कैसे समाप्त कर सकता हूं?


1
यदि आप एक विशेष टर्मिनल पर सब कुछ मारने के साथ ठीक हैं, तो आप कुछ ऐसा कर सकते हैं fuser -k /dev/pts/0या जो कुछ भी टर्मिनल के whoआउटपुट में दिखाई दे रहा है। थोड़ा अजीब उन सभी ने SIGHUP को नजरअंदाज कर दिया, हालांकि। वे एक screenसत्र में चल रहे थे या कुछ और?
ब्राचली

मुझे मिलता है: 1031 प्रक्रिया को नहीं मार सका: ऐसी कोई प्रक्रिया नहीं। कुछ खास नहीं सिर्फ PuTTY का उपयोग करने में SSH'd - मुझे लगता है कि मेरा नया राउटर निष्क्रिय कनेक्शन को छोड़ने में आक्रामक है - हालांकि मैंने सोचा होगा कि दूसरे छोर ने टीसीपी कनवर्टर समाप्त होने के बाद कुछ किया होगा - शायद यह नहीं पता (अभी तक)?
मार्मनल

1
अद्यतन करें कि कमांड अन्य उपयोगकर्ताओं ( whoअब और नहीं में 0 ) के लिए काम कर रहा है , धन्यवाद!
markmnl

"मेरे SSH सत्र हालांकि गिर रहे हैं ... प्रमुख समस्या यह है कि मेरे पिछले सत्र अभी भी जीवित हैं" थोड़ा विरोधाभासी है। उन्हें या तो काट दिया गया है, या वे अभी भी जुड़े हुए हैं। हो सकता है कि आपको समझाना चाहिए कि आप इस निष्कर्ष पर कैसे पहुंचे हैं कि आप डिस्कनेक्ट हो गए हैं, फिर से कनेक्ट करें और महसूस करें कि आपका पुराना कनेक्शन अभी भी चल रहा है।
गोल्डीलॉक्स

जवाबों:


58

तत्काल समस्या को हल करने के लिए, कि sudoers फ़ाइल लॉक है, आप बस लॉक फ़ाइल को हटा सकते हैं। यह आमतौर पर `/etc/sudoers.tmp" होगा, यह देखने के लिए कि आदमी पृष्ठ की जाँच करें कि आप लॉक फ़ाइल को हटाते हैं, आप फिर से visudo चला सकते हैं।

उन सभी सत्रों को हटाने के लिए जिन्हें अभी भी लटका हुआ है, पहले अपने स्वयं के वर्तमान सत्र का पता लगाएं। फिर, यदि आपका अपना पिड 12345 है, तो करें

ps -ef | grep sshd | grep -v root | grep -v 12345 | grep -v grep | awk '{print "sudo kill -9", $2}' |sh 

आप | shहत्या के बारे में योजना बना रहे पीआईडी ​​की जांच के लिए पहले फाइनल के बिना इसे करना चाह सकते हैं ।

यदि आप लिनक्स पर हैं, तो आप इसके बजाय उपयोग कर सकते हैं

pkill -o -u YOURUSERNAME sshd

अपने सबसे पुराने SSH सत्र को मारने के लिए। ऐसा करना जारी रखें जब तक कि आपका वर्तमान सत्र केवल एक ही शेष न हो।

जब कोई डेटा नहीं भेजा गया हो, तो आप हर 15 सेकंड में एक संदेश भेजने के लिए ServerAliveInterval 15अपने में सेट करना चाह सकते हैं .ssh/configman ssh_configअधिक जानकारी के लिए।


1
CentOS पर - यदि आप SSH रूट खाते में हैं, तो यह उत्तर काम नहीं करेगा, निम्न का उपयोग करके देखें: ps aux | grep ssh | grep -v / usr / sbin | awk '{प्रिंट $ 2}' | xargs मार
अली नडालिज़ादेह

धन्यवाद। यह काम। मैं इस बारे में स्पष्ट नहीं हूं grep -v 12345कि वाक्य रचना का हिस्सा किस उद्देश्य से है ? वह सब पास करो जिसमें कुछ नहीं है 12345?
भगवान लोह।

grep -v 12345" 12345मैच से मेल खाते किसी भी लाइन को हटा दें "। इसलिए, आपको पहले अपने सत्र के पीआईडी ​​की पहचान करनी चाहिए, और इसके बजाय उस पीआईडी ​​का उपयोग करना चाहिए 12345
जेनी डी

ऐसे सभी सत्रों को मारने और इस्तीफा देने के बाद, कमांड whoया topअभी भी हस्ताक्षर किए गए उपयोगकर्ताओं की पुरानी संख्या दिखाता है, यहां तक ​​कि यह सिर्फ 1 दिखाना चाहिए। इसे कैसे ताज़ा किया जा सकता है?
.मेगा

2

यदि आप प्रक्रियाओं को सूचीबद्ध करते हैं ताकि आप उनकी कमांड और तर्क देखें (जैसे ps -fकि procps से होता है), तो आपको फिर sshd प्रक्रियाओं को देखना चाहिए:

sshd: user@pts/7

टर्मिनल ( pts/7) यहाँ का प्रमुख भाग है - यदि आप इसकी तुलना अपने वर्तमान टर्मिनल ( tty) से करते हैं, तो आप देख सकते हैं कि आपका सक्रिय सत्र कौन सा है। ऐसा करने के लिए निश्चित रूप से अन्य तरीके हैं (जैसे वर्तमान में चल रहे शेल के पीआईडी ​​को देखना और प्रक्रिया पेड़ में एक का पता लगाना), लेकिन यह सबसे आसान संभावना है। आप इन पंक्तियों के साथ कुछ का उपयोग कर सकते हैं:

# current tty name
TTY=$(tty | cut -f3- -d/)
# PIDs of other sshd processes
ps -o pid= -o command= -C sshd \
    | grep sshd:.*@ \
    | grep -v "@$TTY" \
    | sed "s/ sshd.*//"

फिर आप पीआईडी ​​को मारने के लिए फ़ीड कर सकते हैं xargsलेकिन हमेशा सुनिश्चित करें कि आप मुख्य sshdप्रक्रिया को नहीं मारते हैं जो नए कनेक्शन को संभालती है

संबंधित नोट पर, यह सलाह दी जाती है कि आम तौर पर पार्सिंग psआउटपुट त्रुटि-प्रवण होता है (विशेषकर विभिन्न प्रणालियों में) इसके आउटपुट प्रारूपों की परिवर्तनशीलता के कारण (यहां उपयोग के द्वारा बड़े पैमाने पर इसे कम किया जाता है -o pid= -o command=)।


1

इससे सत्र 2+ दिनों तक लटका रहेगा। इसे क्रोन के रूप में रखा जा सकता था।

for i in `w|awk '{print $2,$5}'|grep days|cut -d' ' -f1`; do fuser -k /dev/$i; done

यह सभी को मार देगा लेकिन आपका (अंतिम सक्रिय सत्र)। इसे टर्मिनल से चलाएं।

for i in `w|tail -n+3|awk '{print $2,$5}'|grep -v 0.00s|cut -d' ' -f1`; do fuser -k /dev/$i; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.