এখানে নথিতে এসএসএইচ-এর উপর কমান্ড চালানোর সময় কোনও টিটিওয়াই উপস্থিত নেই


10

আমি এখানে একটি নথিতে এসএসএইচের উপর একটি কমান্ড চালানোর চেষ্টা করছি:

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

সাধারণত যখন আমি এমন কিছু চালানোর চেষ্টা করি যা ইনপুট প্রয়োজন, যেমন সুডোর পাসওয়ার্ড ব্যতীত সাধারণত কাজ করে। সেক্ষেত্রে আমি নিম্নলিখিত বার্তাটি পাচ্ছি:

sudo: no tty present and no askpass program specified

আমি জানি যে আমি -tএসএসএইচ-তে পতাকাটি সিউডো-টিটি বরাদ্দ করতে ব্যবহার করতে পারি যেমন:

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

এবং এটি কাজ করবে, কিন্তু যখন আমি এখানে এখানে নথির সাথে একই জিনিসটি চেষ্টা করি তখন এটি কার্যকর হয় না এবং কোনও টিটি উপস্থিত না হওয়ার বিষয়ে আমি একই ত্রুটি পেয়ে যাব:

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

এই ধারণাটি আমি কীভাবে করব?

এছাড়াও, আপনি যদি ভাবছেন যে আমি কেন এটি এখানে একই নথিতে পাস করার পরিবর্তে এটি এখানে-নথির সাথে কাজ করতে চাই, কারণ ইনপুট কমান্ডগুলি (কয়েকটি থাকতে পারে) কোনও স্ক্রিপ্ট দ্বারা পড়া কনফিগারেশন ফাইল থেকে আসে এবং আমি শুনেছি এটি কোয়েট, ডাবল কোটস ইত্যাদির জন্য কমান্ডগুলি পালনের ঝামেলা এড়ায়

উত্তর:


6

visudoসুডোর ফাইল সম্পাদনা করতে এবং নীচের লাইনটি সন্নিবেশ করতে ব্যবহার করুন :

Defaults:<user>    !requiretty

এটি কেন ssh -t "something" versus ssh -t <<STOP something STOPকাজ করে না তা উত্তর দেয় না। ধরা যাক আমি সুডো ব্যবহার করছি না তবে আমি সরাসরি নিজের ব্যবহারকারীর জন্য পাসডাব্লুড ব্যবহার করছি, আমি এখনও হিরডোক ব্যবহার করে টিটিওয়াই পাব না।

ssh -t -tস্টিডিন কোনও টার্মিনাল না হলেও সিউডো-টিটি বরাদ্দকে জোর করার চেষ্টা করুন ।


ধন্যবাদ, আমি এই সংশোধনটি অন্য কোথাও দেখেছি, তবে এটি কেবলমাত্র কমান্ডগুলি sudo ব্যবহার করে তা সমস্যা দেখা দেয়। Ssh -t "কিছু" বনাম ssh -t << স্টপ কিছু স্টপ কাজ করে না কেন এটি উত্তর দেয় না। ধরা যাক আমি সুডো ব্যবহার করছি না তবে আমি সরাসরি নিজের ব্যবহারকারীর জন্য পাসডাব্লুড ব্যবহার করছি, আমি এখনও হিরডোক ব্যবহার করে টিটিওয়াই পাব না।
lpfavreau

আমি আমার উত্তর আপডেট করেছি।
কোয়ান্টা

1

কেন কেবল এখানে নথিকে কোনও ভেরিয়েবলে সংরক্ষণ করবেন না যা ssh -tকমান্ড আর্গুমেন্ট হিসাবে দেওয়া হবে ।

আরও সাধারণ নোটে, ssh -Tরিমোট হোস্টের স্টিডিন যদি হেরডোক থেকে পুনর্নির্দেশ করা হয় ( sshpty বরাদ্দ করার চেষ্টা থেকে বিরত রাখতে ) তবে কমান্ড আর্গুমেন্ট হিসাবে রিমোট শেলটি ব্যবহার বা নির্দিষ্ট করুন ।

# 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.