ثابت: sudo: لا يوجد tty ولا يوجد برنامج askpass محدد

يعد سطر الإخراج المحدد لبرنامج no tty و no askpass أحد رسائل خطأ ssh التي ليست مفيدة حقًا لأنها لا تصل حقًا إلى سبب المشكلة. على الأرجح ، أنت تعمل بالفعل مع TTY صالح من نوع ما عندما ترى الرسالة وربما تعاملت مع إدخال كلمة مرور sudo الخاصة بك على ssh بشكل جيد. من المرجح أنك تتعامل مع خطأ نحوي ، لكن الرسالة لا تتناول هذه الحقيقة بشكل مباشر.

نظرًا لأن هذه مشكلة مرتبطة بـ ssh نفسها ، فستتمكن على الأرجح من إعادة إنتاج المشكلة على خدمات Linux و FreeBSD و macOS و Cygwin's Unix على Microsoft Windows. لحسن الحظ ، يجب أن يكون الإصلاح متماثلًا إلى حد كبير على جميع هذه الأنظمة الأساسية.

الطريقة الأولى: البحث عن محطة طرفية لـ ssh

على الرغم من أنك تعمل بالفعل من محطة طرفية ، فمن المحتمل ألا تدرك ssh ذلك. ربما لا يزال يحاول البحث عن محاكي طرفية TTY على الرغم من حقيقة أنك داخل نافذة موجه الأوامر. حاول إعادة إنتاج الخطأ لاختبار هذا. قمنا بتكوين جهاز افتراضي ليكون بمثابة مثال وقمنا بتشغيل ssh [email protected] 'sudo /var/mail/startup.sh' كاختبار. بطبيعة الحال ، سترغب في تغيير سطر الأوامر و ssh إلى شيء يطابق ما تحاول القيام به.

ستحتاج إلى التأكد من تسجيل الدخول إلى الخادم الذي كنت تعتقد أنك كذلك. بغض النظر ، تحقق لمعرفة ما إذا كنت لا تزال تتلقى sudo: لا يوجد tty ولا توجد رسالة خطأ محددة لبرنامج askpass. أكثر من المحتمل ، إذا كنت لا تزال تستقبلها ، فسترى ذلك ثلاث مرات وربما يُطلب منك إدخال كلمة المرور بالطريقة التي تريدها إذا كنت تقوم بتشغيل sudo محليًا على Debian أو Ubuntu.

حاول إضافة -t بعد ssh لتصحيح الخطأ النحوي الخاص بك. تسع مرات من أصل عشرة سيجبر هذا ssh على تخصيص TTY افتراضي لنفسه والتظاهر بأنه يعمل داخل محطة حقيقية. لا يتعين عليك تغيير أي شيء آخر يتعلق بأمرك. ما عليك سوى إضافة الخيار -t بعد الأحرف ssh ثم احتفظ بالمضيف وأمر الأمر نفسه. ستحتاج أيضًا إلى وضع ذلك في الاعتبار إذا كان عليك تشغيل ssh في الجزء الأخير من الأمر.

على سبيل المثال ، إذا كنت تحصل على نفس النوع من الخطأ عند تشغيل أمر تم تنسيقه كـ ssh -t [email protected] 'ssh [email protected]' ، فسيتعين عليك الاحتفاظ بالخيار -t بعد أول ssh لـ امنع ذلك. لاحظ أنه إذا قمت بتغيير الأمر الثاني لاحقًا إما لإنتاج البيانات أو استهلاكها ، فلن ترغب في استخدام -t على الإطلاق. على سبيل المثال ، إذا بدأت تشغيل cat بدلاً من برنامج نصي ، فيمكنك التخلص من -t نظرًا لأنك لن تحتاج إلى تخصيص محطة طرفية لذلك.

الطريقة 2: تصحيح ملف visudo

قد يكون لديك أيضًا مشكلة في التكوين تؤدي إلى ظهور هذا الخطأ. قم بتعديل ملف visudo بإصدار الأمر sudo visudo ، وتذكر أنك لن ترغب أبدًا في تحرير هذا الملف بأي طريقة أخرى. يجب أن تجد سطرًا يحتوي على ALL = NOPASSWD فيه متبوعًا بأنواع الأوامر التي لا تحتاج إلى إدخال كلمة مرور المسؤول لتشغيلها.

يجب أن ينتهي كل أمر فردي بفاصلة باستثناء آخر أمر في السطر. وبالتالي ، إذا كان لديك شيء يقرأ مثل / sbin / poweroff / sbin / start / sbin / stop ، فسوف يتعامل مع كل ذلك كأمر واحد ويرمي الخطأ إليك. وبالمثل ، إذا كنت تفتقد أمرًا تحاول تشغيله عبر ssh ، فستتلقى هذا الخطأ أيضًا. قم بإجراء التعديلات اللازمة واحفظ الملف قبل التحقق مما إذا كان الخطأ لا يزال قابلاً للتكرار.

إذا كان لا يزال لديك الخطأ حتى بعد القيام بذلك وإعادة تشغيل الخدمة ، فجرّب  الأمر التالي في الصورة أدناه  وتأكد من أن سطر PermitTTY يحتوي على كلمة نعم بعدها. إذا كان هذا هو آخر سطر في ملفك ، فتأكد من وجود سطر جديد فارغ بعد ذلك. ينفذ GNU nano هذه المهمة تلقائيًا بشكل افتراضي.

ستحتاج إلى إعادة تشغيل أي خدمات ذات صلة قبل محاولة إعادة إنشاء رسالة الخطأ مرة أخرى.