शटडाउन कमांड भेजने के बाद, ssh सत्र समाप्त नहीं होता है


12

जब भी मैं अपने डेबियन सर्वर को बंद करने या फिर से चालू करने के लिए कमांड भेजता हूं, तो मेरा शेल लटका हुआ और अनुत्तरदायी होता है (अन्य कमांड टाइप नहीं कर सकता)।

यहाँ छवि विवरण दर्ज करें

सत्र में उबंटू परिणामों में समान रूप से कार्रवाई करना शालीनता से बंद करना, इसलिए मेरे पास एक बंधा हुआ टर्मिनल नहीं बचा है जो वहां लटका हुआ है। क्या कोई ऐसा पैकेज है जिसे मुझे स्थापित करने या कॉन्फ़िगरेशन परिवर्तन करने की आवश्यकता है ताकि मैं डेबियन पर यही व्यवहार प्राप्त कर सकूं?


क्या एक ही व्यवहार sudo shutdown -h nowपॉवरऑफ़ के साथ होता है , और / या sudo reboot(पुनः आरंभ करने के लिए) होता है?
eyoung100

हाँ, यह उन लोगों के साथ भी होता है।
प्रोग्रामर

2
NB आप इन त्रिशंकु सत्रों में से एक को <enter>, tilde, और period (~।) लिखकर मार सकते हैं।
केंस्टर जूल

जवाबों:


11

यह मेरे लिए काम किया:

apt-get install libpam-systemd dbus

यह भी सुनिश्चित करें कि UsePAM yesआपके ssh config में है।

grep -i UsePAM /etc/ssh/sshd_config

दुर्भाग्य से, आपको प्रभावी होने के लिए समाधान के लिए रीबूट करना होगा ...

सर्वरफॉल्ट पर विस्तृत स्पष्टीकरण ।


मैं सिर्फ ubuntu 16.04 पर एक ही समस्या थी, जिसके लिए पिछले समाधान काम नहीं किया था, लेकिन यह एक किया था।
प्रोग्रामर

7

ऐसा लगता है कि यह बग # 751636 केsystemd तहत वर्तमान में ट्रैक किया गया मुद्दा है ।

जब होस्ट बंद हो जाता है या फिर से चालू होता है, systemdतो वह ssh सत्र को मारने से पहले नेटवर्क को बंद कर सकता है।

कुछ समाधान दिए गए हैं लेकिन कुछ भी ठोस नहीं है:

  1. का उपयोग करते हुए acpid/acpi-support-baseबिजली के ईवेंट प्रबंधित और करने के लिए निम्नलिखित जोड़ने के लिए/etc/acpi/powerbtn-acpi-support.sh

    else
    -       # Normal handling.
    -       /sbin/shutdown -h -P now "Power button pressed"
    +
    +       if [ -x /bin/systemctl ] ; then
    +           echo "\nPower button pressed\nThe system is going down for system halt NOW!" |\
    +            /usr/bin/wall -n
    +           /bin/systemctl --force poweroff
    +       else
    +           # Normal handling.
    +           /sbin/shutdown -h -P now "Power button pressed"
    +       fi
    +
    fi
    

    और फिर अपने में उपनाम बनाएँ ~/.bashrc:

    alias reboot='echo "The system is going down for system reboot NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force reboot'
    
    alias poweroff='echo "The system is going down for system halt NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force poweroff'
    
  2. /etc/systemd/system/ssh-user-sessions.serviceइसमें निम्नलिखित के साथ बनाना :

    [Unit]
    Description=Shutdown all ssh sessions before network
    After=network.target
    
    [Service]
    TimeoutStartSec=0
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/true
    ExecStop=/usr/bin/killall sshd
    

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

1
पुनः लोड systemd डेमॉन: systemctl daemon-reload, यह भी इन-आदेश तुरंत systemd सेवा को सक्रिय करने के लिए: systemctl start ssh-user-sessions.servicebootup पर सेवा और सक्षम करने के लिएsystemctl enable ssh-user-sessions.service
न्यूरॉन

पहले 2 दौड़ में दौड़ने के साथ किया। तीसरी कमांड चलाने के परिणामस्वरूप: The unit files have no [Install] section. They are not meant to be enabled using systemctl.लेकिन इसकी आवश्यकता नहीं लगती है।
प्रोग्रामर

हाँ, यह उल्लेख करना भूल गया कि यूनिट फ़ाइल में एक "[Install]"अनुभाग शामिल हो सकता है , जो इकाई के लिए स्थापना जानकारी प्रदान करता है। systemdरनटाइम के दौरान इस सेक्शन की व्याख्या नहीं की जाती है। यह विशेष रूप से यूनिट की स्थापना के दौरान टूल के सक्षम और अक्षम कमांड द्वारा उपयोग किया जाता है systemctl
न्यूरॉन

मैंने [Install]इसके बाद WantedBy=multi-user.targetफाइल को जोड़ा , जिसके परिणामस्वरूप systemctl enable ssh-user-sessions.serviceकोई त्रुटि नहीं हुई और परिणाम रिबूट में प्रभावी हुई। क्या ऐसा करने में कुछ गलत है?
प्रोग्रामर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.