PuTTy SSH सत्र 2 सिग्नल द्वारा मारा गया


0

जब मैं ssh के माध्यम से एक मशीन से जुड़ता हूं तो मैं "Ctrl + C" संयोजन का उपयोग नहीं कर सकता क्योंकि यह सत्र को किल सिग्नल भेजता है।

एक उदाहरण के रूप में, मैं मुख्य मशीन से ग्राहक मशीन के लिए एक एसएसएच सत्र शुरू करता हूं, मैं क्लाइंट पर "शीर्ष" कमांड चलाता हूं और जब मैं "शीर्ष" से बाहर निकलना चाहता हूं तो मैं "Ctrl + C" संयोजन का उपयोग करता हूं और एसएसएच सत्र बंद हो जाता है। इस प्रक्रिया का आउटपुट यह है:

[root@client ~]# top             //I use Ctrl + C to exit from top
[root@main ~]# Killed by signal 2.

"ssh -vvv" आउटपुट:

Last login: Tue Feb 13 14:08:57 2018 from main.company.intra
[root@client ~]# debug3: send packet: type 1
debug1: channel 0: free: client-session, nchannels 1
debug3: channel 0: status: The following connections are open:
  #0 client-session (t4 r0 i0/0 o0/0 fd 4/5 cc -1)

Killed by signal 2.
[root@main ~]#

जब मैं ssh के लिए MobaXterm की कोशिश करता हूं तो कोई समस्या नहीं है। तो समस्या सर्वर कॉन्फ़िगरेशन के बारे में नहीं है, यह PuTTy कॉन्फ़िगरेशन के बारे में है।

मुझे लगता है कि जब मैं MobaXterm का उपयोग कर रहा हूं तो Ctrl + C क्लाइंट सर्वर को भेज दिया गया है, जबकि PuTTy का उपयोग करके मुख्य सर्वर (इसलिए ssh कनेक्शन प्रक्रिया) को सिग्नल भेजा गया है। मुझे लगता है कि यदि हम इस मार्ग को ठीक करते हैं तो समस्या हल हो जाएगी।


2
मुझे लगता है कि मार Q या q जबकि शीर्ष में आप इसे से बाहर निकल जाएगा। या तुमने कोशिश की ?
C0deDaedalus

हाँ। माफ़ कीजिये। मैं सिर्फ एक उदाहरण देना चाहता हूं। सिर्फ "शीर्ष" नहीं, मैं कभी-कभी किसी प्रक्रिया को मारने के लिए Ctrl + C का उपयोग करता हूं।
Gefolge

जवाबों:


1

मैं "Ctrl + C" संयोजन का उपयोग नहीं कर सकता क्योंकि यह सत्र को किल सिग्नल भेजता है।

Ctrl + सी आम तौर पर एक भेजने के लिए माना जाता है इंटरप्ट सिग्नल । इंटरप्ट सिग्नल है सिग्नल 2. तो यह वही कर रहा है जो इरादा था।

Killed by signal 2

वह संदेश वह नहीं है जिसे आप सामान्य रूप से देखते हैं लेकिन यह काफी सही है। यह प्रक्रिया समाप्त हो गई क्योंकि इसे एक संकेत 2 प्राप्त हुआ, बाधा संकेत SIGINT द्वारा निर्मित Ctrl + सी


पहले यह देखने देता है कि कौन-सा संयोजन इंटरेक्ट सिग्नल से मेल खाता है

$ stty -a | grep intr
intr = ^C

अब इंटरप्ट सिग्नल के न्यूमेरिक मान की जाँच करें

$ man 7 signal
...
Signal     Value     Action   Comment
-----------------------------------------------------------------------
SIGHUP        1       Term    Hangup detected on controlling terminal
                              or death of controlling process
SIGINT        2       Term    Interrupt from keyboard
SIGQUIT       3       Core    Quit from keyboard
SIGFPE        8       Core    Floating point exception
SIGKILL       9       Term    Kill signal
SIGSEGV      11       Core    Invalid memory reference

ध्यान दें कि KILL सिग्नल 9 (2 नहीं) सिग्नल है। आप इनमें से कोई भी संकेत भेज सकते हैं kill कमांड लेकिन उनमें से केवल एक ही KILL सिग्नल है और यह सिग्नल 2 नहीं है।


तो सवाल यह है कि उस संदेश का निर्माण क्या है "सिग्नल 2 द्वारा मार दिया गया"।

अगर हम देखें https://stackoverflow.com/questions/3165511/how-to-make-terminal-not-print-killed-by-signal-2-on-catching-a-sigint हम देखते हैं कि यदि आपके पास कोई स्क्रिप्ट है, तो यह संदेश तैयार किया जा सकता है trap SIGINT संकेतों को ग्रहण करने और विशेष संचालन करने के लिए।

शायद आपके पास ए top उर्फ या ए top पहले की स्क्रिप्ट $PATH से /usr/bin?

$ type top
top is /usr/bin/top

आप सुझाव देते हैं कि एक एसएसएच सत्र * निक्स कंप्यूटर से main कंप्यूटर कंप्यूटर client छूट गया है। आपको एक * निक्स शेल प्रॉम्प्ट पर छोड़ना।

MobiXterm के आपके उल्लेख से लेकर PuTTY के विकल्प के रूप में, मैं आपको लगता है कि आप PuTTY के Windows संस्करण का उपयोग कर रहे हैं न कि PuTTY के * nix संस्करण का। यदि ऐसा है तो यह स्पष्ट नहीं है कि आपका SSH कनेक्शन दो भागों में क्यों है (Win-PC - & gt; "मुख्य" - & gt; "क्लाइंट")।

यदि आप मुख्य और फिर उपयोग करने के लिए लॉग इन करने के लिए PuTTY का उपयोग कर रहे हैं ssh ग्राहक में प्रवेश करने के लिए, यह विशेष रूप से आश्चर्य की बात नहीं है कि PuTTY के ^ C को मुख्य द्वारा नियंत्रित किया जाता है और ग्राहक के लिए पारित नहीं किया जाता है top

हम उल्लेख कर सकते हैं https://unix.stackexchange.com/questions/102061/ctrl-c-handling-in-ssh-session जो इस विषय पर चर्चा करता है।

ssh remotehost Remotehost पर एक इंटरैक्टिव सत्र चलाएगा। क्लाइंट की तरफ, ssh स्टडी द्वारा उपयोग किए जाने वाले ट्टी को "रॉ" मोड में सेट करने का प्रयास करेगा, और रिमोट होस्ट पर sshd एक छद्म-टिटी आवंटित करेगा और आपके शेल को लॉगिन शेल (जैसे -बैश) के रूप में चलाएगा।

कच्चे मोड को सेट करने का मतलब है कि ऐसे अक्षर जो सामान्य रूप से सिग्नल भेजते हैं (जैसे कि Ctrl-C और Ctrl-), बजाय इनपुट स्ट्रीम में डाले। ssh ऐसे पात्रों को दूरस्थ होस्ट को भेजेगा, जहां वे संभवतः SIGINT या SIGQUIT को भेजेंगे और, आमतौर पर, किसी भी कमांड को मारेंगे और आपको दूरस्थ होस्ट पर एक शेल में लौटाएंगे। Ssh कनेक्शन जीवित रहेगा, जब तक कि रिमोट शेल जीवित है।

...

ssh remotehost command args ... Remotehost पर एक गैर-संवादात्मक सत्र चलाएगा। क्लाइंट की ओर, ssh tty को कच्चे मोड पर सेट नहीं करेगा (अच्छी तरह से, पासवर्ड या पासफ़्रेज़ में पढ़ने के लिए छोड़कर)। यदि आप Ctrl-C टाइप करते हैं, तो ssh को SIGINT भेज दिया जाएगा और तुरंत ही इसे समाप्त कर दिया जाएगा, यहां तक ​​कि रिमोटहॉस्ट मैसेज का कनेक्शन जारी किए बिना।

इसलिए मुझे संदेह है कि आपका PuTTY सत्र आपके MobaXterm सत्र की तुलना में अलग तरीके से कॉन्फ़िगर किया गया है और कुछ सामान जिस पर आप (और इसलिए हम) अनभिज्ञ हैं।

PuTTY एक संकेत नहीं भेज रहा है, यह एक ASCII नियंत्रण चरित्र भेज रहा है। यह साबित करना आसान है। हम सिर्फ शेल को ASCII कंट्रोल कैरेक्टर 0x03 (ETX, Ctrl + C) बनाने के लिए कहते हैं, शेल के पास कोई विशेष हैंडलिंग नहीं है और फिर देखें कि PuTTY क्या भेजता है:

$ stty intr ^A
$ cat -v
I will now press Ctrl + C ^C
I will now press Ctrl + A
$ $ echo $?
130

देख http://tldp.org/LDP/abs/html/exitcodes.html 130 = 128 + 2 = सिग्नल 2. इस मामले में मैंने ^ ए को 0x01 को शेल में भेजने के लिए इस्तेमाल किया, जिसने सिग्नल 2 को भेजा top प्रक्रिया। ^ C ने अभी 0x03 भेजा है जो cat-V ^ सी के रूप में प्रदर्शित करता है।

इसलिए मैं यह पता लगाने की कोशिश नहीं कर रहा कि पुट्टी "को क्यों भेजता है" जब मोबाईल्टर नहीं करता है। दोनों में से कोई भी ऐसा नहीं करता है। वे सिर्फ एक ASCII नियंत्रण चरित्र भेजते हैं।


तो देखो कि तुम कैसे PuTTY आह्वान, यह एक डेस्कटॉप आइकन पर क्लिक करके है? क्या उस आइकन में लक्ष्य में अतिरिक्त पैरामीटर के साथ गुण (Alt + Enter) हैं? आदि आदि।


वास्तव में समस्या शीर्ष के बारे में नहीं है। यह मेरे द्वारा उपयोग किए जाने वाले प्रत्येक अवरोध के बारे में है। यदि मैं गलत कमांड टाइप करता हूं और जब मैं इसे छोड़ने के लिए Ctrl + C का उपयोग करता हूं तो मैं अपना ssh कनेक्शन खो देता हूं .. मुझे लगता है कि जब मैं MobaXterm का उपयोग कर रहा हूं तो Ctrl + C क्लाइंट सर्वर को भेज दिया गया है, जबकि PuTTy का उपयोग करते हुए इंटरप्ट सिग्नल भेजा गया है मुख्य सर्वर (ताकि ssh कनेक्शन प्रक्रिया)। मुझे लगता है कि यदि हम इस मार्ग को ठीक करते हैं तो समस्या हल हो जाएगी।
Gefolge

1
@Gefolge: सिग्नल हमेशा मुख्य को पास हो जाता है। सवाल यह है कि मुख्य सिग्नल पर प्रक्रिया कैसे संकेत देती है। यह निर्भर करता है कि वास्तव में यह प्रक्रिया कैसे लागू की गई थी, जो कि उपनामों और लिपियों की उपस्थिति (मुख्य और साथ ही क्लाइंट पर) पर निर्भर करती है। जैसे शायद मुख्य में एक शीर्ष स्क्रिप्ट है जो चलती है ssh client top किसी कारण के लिए?
RedGrittyBrick
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.