SSP सत्र कभी भी बंद नहीं होता है जब "एप-गेट स्थापित करें"


14

मुसीबत

apt-get installएक गैर-इंटरैक्टिव एसएसएच सत्र में चलने पर, सत्र कभी बंद नहीं होता है। उदाहरण:

ssh user@target "sudo apt-get -y install my_package"

यह my_packageठीक से स्थापित हो जाता है, लेकिन SSH सत्र खुलने का खतरा है।

सवाल

क्या apt-getकाम करने के लिए एसएसएच पास करने के लिए कोई झंडा है ?


अतिरिक्त जानकारी

प्रसंग

एक एकीकरण सर्वर पर एक पैकेज की स्वचालित तैनाती के लिए रिमोट इंस्टॉलेशन का उपयोग किया जाता है। जैसे ही हम कुछ कोड परिवर्तनों को एक रिपॉजिटरी में धकेलते हैं, एक नौकरी कोड में खींचती है, पैकेज का निर्माण करती है, और एकीकरण पर यह दर्शाती है कि सब कुछ अच्छा काम करता है (जहाँ तक तैनाती का सवाल है)।

पहले से ही कोशिश की और नोट्स

  • वही SSH सत्र का निष्पादन apt-get updateसफाई से बंद हो जाता है। ध्यान दें कि apt-get updateइंटरैक्टिव नहीं है, जबकि apt-get installहै। यह सुझाव दे सकता है कि अन्तरक्रियाशीलता एक मुद्दा है।
  • जैसी आज्ञा ssh user@target "sudo apt-get install my_package && echo Hello"कभी नहीं पहुँचती echo
  • debconf शिकायत करता है कि यह एक अच्छा दृश्यपटल (डिस्प्ले, रीडलाइन) नहीं खोज सकता है, और यह टेलेटाइप पर वापस आता है (हालाँकि रीडलाइन उपलब्ध है)।
  • डिबेंक्फ के सीमांत के संबंध में, -tSSH के साथ TTY को बाध्य करने से मदद नहीं मिलती है। न ही DEBIAN_FRONTEND=noninteractive
  • सभी Ubuntu 12_04 LTS पर किया गया था।

यदि आप मैन्युअल रूप से स्थापित कमांड को निष्पादित करते हैं (यानी ssh user@targetशेल से कमांड) तो क्या यह सही ढंग से काम करता है?
रिंग Ø

इंस्टॉल कमांड ठीक से काम करता है जब मैन्युअल रूप से किया जाता है (इस प्रकार यह सोचने के लिए अग्रणी है कि गैर-लॉगिन / इंटरैक्टिव सत्र प्रकार के साथ कोई समस्या है)।
एरिक प्लैटन

जवाबों:


6

SF पर निम्नलिखित उत्तर ने चाल चली:

ssh दूरस्थ कमांड निष्पादित करने में विफल रहता है जब क्रोन बैश स्क्रिप्ट से चलाया जाता है

यह -tध्वज छद्म ट्टी आवंटन के लिए बाध्य करता है, सिवाय इसके कि जब स्थानीय स्तर पर कोई TTY न हो। लेकिन दो बार झंडा फहराना जैसे -t -tतैसे करने का दिखावा करना। और इससे समस्या हल हो गई।

SSH प्रलेखन देखें:

-t बल छद्म tty आवंटन। इसका उपयोग रिमोट मशीन पर मनमाने ढंग से स्क्रीन-आधारित कार्यक्रमों को निष्पादित करने के लिए किया जा सकता है, जो मेनू सेवाओं को लागू करते समय बहुत उपयोगी हो सकता है। एकाधिक-विकल्प विकल्प tty आवंटन को बाध्य करते हैं, भले ही ssh के पास कोई स्थानीय tty न हो।

अब, वह काम क्यों किया? यह पता चलता है कि debconfलॉग्स में दृश्यपटल के बारे में अब कोई शिकायत नहीं है। इसलिए मेरा मानना ​​है कि जरूरत के अनुसार डबल -tसेट (lures?) debconf, जो apt-get installएसएसएच सत्र को साफ-सुथरा पूरा करने की अनुमति देता है ।


मेरा मानना ​​है कि यह एक अच्छा जवाब है, लेकिन मैं इसे तुरंत चिह्नित नहीं करूंगा। पहला इसलिए कि मैंने खुद को जवाब दिया, और दूसरा, बेहतर / अधिक सामान्य उत्तर हो सकते हैं। भविष्य में इस पर वापस।
एरिक प्लैटन

1

जैसा कि मैंने इसके माध्यम से देखा, यह काम कर सकता है। बाहर निकलने और heredoc द्वारा जो भी कमांड का पालन किया जाना चाहिए उसे कॉल करना। समाधान मिला, लेकिन इसे व्यक्तिगत रूप से आज़माया नहीं गया है।

ssh user@myremotemachine <<-EOF
free -m
exit
EOF

मूल उत्तर यहाँ से आता है: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection


धन्यवाद, कोरसक। मुझे लगता है कि यह शेल और OS वितरण पर निर्भर करता है। मैंने ssh user@host free -mअपने लक्षित वातावरण में बस कोशिश की है, और यह एक आकर्षण की तरह काम करता है। मैं अगले सिफारिश की कोशिश करने जा रहा हूं।
एरिक प्लैटन

मैंने अभी-अभी हेरेडोक दृष्टिकोण के साथ पूरा चलाने की कोशिश की है। इससे समस्या हल नहीं हुई। SSH सत्र उसी तरह लटका रहता है जैसे प्रश्न में प्रस्तुत किया गया है। प्रतिक्रिया और सूचक के लिए फिर से धन्यवाद!
एरिक प्लैटन

1

डेबियन / जेसी के तहत मैं इस आदेश के साथ सफल रहा:

ssh user@host "TERM=READLINE sudo apt-get install --reinstall less && echo done"

लेकिन शायद आपको इसके और अन्य कामों के लिए ansible का उपयोग करने पर विचार करना चाहिए http://docs.ansible.com/ansible/apt_module.html


दिलचस्प है, अच्छा विचार है। अन्सिबल के लिए, शायद अब। मन में सवाल आने पर मुझे वापस नहीं जाना। वैसे भी, मेरा मानना ​​है कि यह जानना अच्छा है कि "अंदर क्या हो रहा है" (सी)।
एरिक प्लैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.