यहाँ दस्तावेज़ में SSH पर कमांड चलाने पर कोई TTY मौजूद नहीं है


10

मैं यहाँ SSH पर इस तरह से एक कमांड चलाने की कोशिश कर रहा हूँ:

ssh example.com <<END
sudo /etc/init.d/apache2 reload
END

जब आम तौर पर काम करता है सिवाय इसके कि मैं कुछ चलाने की कोशिश कर रहा हूं, जिसमें इनपुट की जरूरत है, जैसे कि sudo के लिए पासवर्ड। उस स्थिति में, मुझे निम्न संदेश मिल रहा है:

sudo: no tty present and no askpass program specified

मुझे पता है कि मैं -tइस तरह के रूप में एक छद्म tty आवंटित करने के लिए SSH पर ध्वज का उपयोग कर सकते हैं :

ssh -t example.com "sudo /etc/init.d/apache2 reload"

और यह काम करेगा, लेकिन जब मैं एक ही चीज़ यहाँ-दस्तावेज़ के साथ आज़माता हूँ, तो यह काम नहीं करता है और मुझे कोई त्रुटि नहीं होने के बारे में भी यही त्रुटि मिलेगी:

ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END

किसी भी विचार मैं यह काम कैसे कर सकता हूं?

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

जवाबों:


6

visudoSudoers फ़ाइल को संपादित करने और एक निचली पंक्ति सम्मिलित करने के लिए उपयोग करें:

Defaults:<user>    !requiretty

यह जवाब ssh -t "something" versus ssh -t <<STOP something STOPनहीं देता कि काम क्यों नहीं किया जाता है। मान लीजिए कि मैं sudo का उपयोग नहीं कर रहा हूं, लेकिन मैं सीधे अपने उपयोगकर्ता के लिए passwd का उपयोग कर रहा हूं, मुझे अभी भी heredoc का उपयोग करके TTY नहीं मिलेगा।

ssh -t -tयदि छद्म एक टर्मिनल नहीं है, तो छद्म ट्टी आवंटन को बाध्य करने का प्रयास करें ।


धन्यवाद, मैंने यह फिक्स कहीं और देखा है, लेकिन यह केवल कमांड के लिए समस्या के आसपास जाता है जो sudo का उपयोग करते हैं। इसका उत्तर नहीं है कि ssh -t "something" बनाम ssh -t का उपयोग करके << STOP कुछ काम नहीं करता है। मान लीजिए कि मैं sudo का उपयोग नहीं कर रहा हूं, लेकिन मैं सीधे अपने उपयोगकर्ता के लिए passwd का उपयोग कर रहा हूं, मुझे अभी भी heredoc का उपयोग करके TTY नहीं मिलेगा।
lpfavreau

मैंने अपना उत्तर अपडेट कर दिया है।
क्वांटा

1

क्यों नहीं बस यहाँ दस्तावेज़ को एक चर में संग्रहित करें ssh -tजो कमांड तर्क के रूप में दिया जाएगा ।

अधिक सामान्य नोट पर, ssh -Tदूरस्थ शेल को कमांड तर्क के रूप में उपयोग या निर्दिष्ट करें यदि दूरस्थ होस्ट की स्टड को एक हेरेडोक से पुनर्निर्देशित किया जा रहा है ( sshएक आवंटन आवंटित करने की कोशिश करने से रोकने के लिए)।

# store heredoc in a variable
heredoc="$(cat <<EOF
who
sudo ls -ld /
logname
EOF
)"

ssh -t localhost "$heredoc"


# avoid: Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh example.com <<END
+ ssh -T example.com <<END
+ ssh example.com /bin/sh <<END
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.