Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

แก้ไข: sudo: no tty present and no askpass program specified

บรรทัดข้อความ no tty present and no askpass program specified เป็นหนึ่งในข้อผิดพลาด SSH ที่ไม่ค่อยช่วยเหลือ เพราะไม่ได้ชี้ให้เห็นจุดประสงค์ของสาเหตุจริง มากกว่าน่าจะคุณกำลังทำงานกับ TTY ที่ถูกต้องอยู่แล้วเมื่อเห็นข้อความนี้ และคุณน่าจะเคยป้อนรหัสผ่าน sudo ผ่าน SSH ได้ดีอยู่แล้ว น่าจะเป็นข้อผิดพลาดทาง syntax แต่ข้อความไม่ได้กล่าวถึงโดยตรง

เนื่องจากเป็นปัญหาที่เกี่ยวกับ SSH เอง คุณน่าจะ reproduce ปัญหาได้บน Linux, FreeBSD, macOS และ Cygwin Unix services บน Windows โชคดีที่วิธีแก้ควรเหมือนกันบนทุกแพลตฟอร์ม

วิธีที่ 1: หา Terminal ให้ SSH (Finding a Terminal for SSH)

แม้คุณจะทำงานจากเทอร์มินัลอยู่แล้ว SSH อาจไม่รู้เรื่อง อาจยังคงพยายามหา TTY terminal emulator อยู่ แม้คุณจะอยู่ใน command prompt window ลอง reproduce error เพื่อทดสอบ เราตั้งค่า VM เป็นตัวอย่างและรัน
ssh user@linuxtest.example 'sudo /var/mail/startup.sh'
เป็นการทดสอบ คุณต้องเปลี่ยนคำสั่งและบรรทัด SSH ให้ตรงกับสิ่งที่คุณทำอยู่

แก้ไข: sudo: no tty present and no askpass program specified

คุณต้องแน่ใจว่าล็อกอินเข้เซิร์ฟเวอร์ที่คิดไว้ ไม่ว่าจะอย่างไร ให้ดูว่ายังได้ข้อความ sudo: no tty present and no askpass program specified หรือไม่ มากกว่าน่าจะยังได้รับข้อความนี้ 3 ครั้ง และอาจถูกขอรหัสผ่านเหมือนตอนรัน sudo ในพื้นที่บน Debian หรือ Ubuntu

ลองเพิ่ม -t หลัง ssh เพื่อแก้ syntax error สิบกว่าสิบครั้ง จะบังคับให้ SSH จัดสรร virtual TTY ให้ตัวเอง และทำเหมือนรันอยู่ในเทอร์มินัลจริง ไม่ต้องเปลี่ยนอะไรในคำสั่ง แค่เพิ่มตัวเลือก -t หลังตัวอักษร ssh แล้วคง host และคำสั่งที่ส่งไปเหมือนเดิม จะต้องจำไว้ด้วยหากต้องรัน ssh ในส่วนท้ายของคำสั่ง

เช่น หากได้ข้อผิดพลาดแบบเดียวกันตอนรันคำสั่งรูปแบบ ssh -t user@linuxtest.example 'ssh user@linuxtest2.example' คุณต้องคง -t หลัง ssh ตัวแรกเพื่อป้องกัน แต่ถ้าต่อไปคุณเปลี่ยนคำสั่งที่สองให้ผลิตหรือบริโภคข้อมูล คุณจะไม่ต้องการใช้ -t เลย เช่น หากเริ่มรัน cat แทนสคริปต์ ก็สามารถลบ -t ได้ เพราะไม่ต้องจัดสรรเทอร์มินัลสำหรับนั้น

วิธีที่ 2: แก้ไขไฟล์ visudo (Patching the visudo File)

อาจมีปัญหาการตั้งค่าที่ทำให้เกิดข้อผิดพลาดนี้ ให้แก้ไขไฟล์ visudo โดยรันคำสั่ง sudo visudo และจำไว้ว่า อย่าแก้ไขไฟล์นี้ด้วยวิธีอื่นเด็ดขาด ควรเจอบรรทัดที่มี ALL = NOPASSWD ตามด้วยประเภทคำสั่งที่ไม่ต้องใส่รหัสผ่านผู้ดูแลระบบ

แต่ละคำสั่งต้องจบด้วย comma ยกเว้นตัวสุดท้ายในบรรทัด ดังนั้นหากมีอะไรแบบ /sbin/poweroff /sbin/start /sbin/stop จะถือเป็นคำสั่งเดียวและโยนข้อผิดพลาดมา เช่นกัน หากขาดคำสั่งที่พยายามรันผ่าน SSH ก็จะได้ข้อผิดพลาดนี้ ให้ปรับแก้ให้ถูกต้องและบันทึกไฟล์ แล้วเช็คว่าข้อผิดพลาดยัง reproduce ได้หรือไม่

หากยังมีข้อผิดพลาดหลังทำแล้วและรีสตาร์ทบริการ ให้ลอง คำสั่งในรูปภาพด้านล่าง และแน่ใจว่าบรรทัด PermitTTY มีคำว่า yes ถ้าบรรทัดสุดท้ายในไฟล์ ให้แน่ใจว่ามี newline ว่างหลังจากนั้น GNU nano ทำอย่างนี้อัตโนมัติโดย default

แก้ไข: sudo: no tty present and no askpass program specified

ต้องรีสตาร์ทบริการที่เกี่ยวข้องก่อนลอง reproduce ข้อความผิดพลาดอีกครั้ง