2016-04-29 9 views
13

मैं शिक्षण उद्देश्यों के लिए एक डॉकर वातावरण विकसित कर रहा हूं और उपयोगकर्ताओं को डॉकर के अंदर स्विच करने में सक्षम होना चाहिए।'su' कमांड 'टर्मिनल से चलाया जाना चाहिए'

मैंने पासवर्ड के साथ 'उपयोगकर्ता' उपयोगकर्ता सेट अप किया है, लेकिन जब मैं इसे su के साथ स्विच करने का प्रयास करता हूं, तो मुझे "सु टर्मिनल से चलाया जाना चाहिए"।

मुझे यह मिलता है अगर मैं डॉकर में एसएसएच करने की कोशिश करता हूं और एक php खोल के माध्यम से आदेश जारी करके (एक अपाचे सेवा डॉकर इंस्टेंस पर चल रहा है)।

किसी भी मदद की बहुत सराहना की जाती है।

+1

मुझे आपके उपयोग के मामले/सेटअप के बारे में अधिक जानने में दिलचस्पी होगी। कंटेनर में एसएसएच चलाना एक विरोधी पैटर्न है। क्या आपको फ्लाई पर उपयोगकर्ता को बदलने की आवश्यकता है (जब आप कंटेनर में हैं ') या बिल्ड प्रक्रिया के हिस्से के रूप में (डॉकरफाइल का उपयोग कर?)। – johnharris85

+1

यदि आप Google को यह त्रुटि संदेश है, तो कई समाधान हैं। –

+0

धन्यवाद वार्मोवरफ्लो वास्तविक सहायता की सराहना की जाएगी। मुझे एक वर्कअराउंड पाइथन चल रहा था लेकिन एक लगातार समाधान की आवश्यकता होगी। – SaintHUN

उत्तर

24

जब आप php के माध्यम से ssh-ing में जा रहे हैं या जा रहे हैं तो आपके सत्र को एक पीटी आवंटित नहीं किया जा रहा है। Pty आवंटित करने के लिए जब ssh का उपयोग करके प्रवेश उपयोग ssh आयकर या ssh -tt:

उत्तर 1: मैं निम्नलिखित समाधान में से प्रत्येक का इस्तेमाल किया है

मैं काफी मजेदार सही कारण चलाने के लिए आदेशों हो रही थी इस तरह के सत्र चलाने पर ptys के लिए: जेनकींस खोल -> एसएसएच ड्राइवर -> एसएसएच परीक्षण -> डॉकर निष्पादन। अच्छा जवाब यहां: https://unix.stackexchange.com/questions/105422/command-must-be-run-from-a-terminal

"एसएसएच के लिए विकल्प का प्रयास करें। अगर यह काम नहीं करता है।"

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

उत्तर 2: उपयोग डोकर रन आयकर ... और डोकर कार्यकारी अपने डोकर कार्यकारी सत्र में

उपयोग आयकर और इसे 'विकल्प Pty आवंटित करने के लिए -यह।

डॉकर निष्पादन के साथ आप अलग-अलग उपयोगकर्ताओं के रूप में कंटेनर में लॉगिन करने के लिए -यू विकल्प का उपयोग कर सकते हैं और su का उपयोग करने से बच सकते हैं। जैसे https://github.com/docker/docker/issues/8631

उत्तर 3::

$ docker exec -u root -it small_hypatia bash 

एक अच्छा सवाल-जवाब इस पर यहाँ नहीं है उपयोग अजगर अपने खोल में एक प्राइवेट अंडे

काफी एक प्यारा हैक :)

[email protected]:~$ su - 
su: must be run from a terminal 

$ echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py 
$ python /tmp/asdf.py 

$ su - 
Password: 

[email protected]:~# 
+2

उत्तर 2 मेरे लिए पूरी तरह से काम किया। धन्यवाद। –

+1

मैं उत्तर 2 (डॉकर पर्यावरण) की तलाश में था - काम करता है! – Pixelartist

+0

एक कंटेनर के अंदर केवल मेरे लिए 3 काम करता है – 4xy

4

यह समाधान 'bsdutiles' पैकेज से 'स्क्रिप्ट' कमांड का उपयोग करके काम करता है जो एक पीटीआई (टर्मिनल) सेट करता है। 'Su' कमांड इसे पढ़ने के लिए तैयार होने से पहले पासवर्ड भेजने से रोकने के लिए 'नींद' आदेश है। 'पूंछ' कमांड 'su' द्वारा जारी "पासवर्ड:" इनपुट लाइन को हटा देता है।

sh -c "sleep 1; echo rootpassword" | script -qc 'su -c whoami - root' | tail -n +2 

सावधान रहें कि रूटपासवर्ड कई तरीकों से देख सकता है (इतिहास, पीएस,/proc /, आदि ...)। कम से कम इतिहास रिकॉर्डिंग से बचने के लिए एक स्पेस के साथ कमांड प्रारंभ करें।

0

यदि आप su के बजाय su-exec का उपयोग करते हैं तो समस्या वाई वें tty पूरी तरह गायब हो जाता है क्योंकि यह su की तरह फोर्किंग के बजाय सीधे execvp को कॉल करता है।

Gosu एक और समान विकल्प है।

संबंधित मुद्दे