แก้ไข: sudo: ไม่มี tty อยู่และไม่ได้ระบุโปรแกรม askpass



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

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



เนื่องจากนี่เป็นปัญหาที่เกี่ยวข้องกับ ssh เองคุณจึงมีแนวโน้มที่จะสามารถสร้างปัญหาซ้ำบนบริการ Linux, FreeBSD, macOS และ Cygwin’s Unix บน Microsoft Windows ได้ โชคดีที่การแก้ไขควรจะเหมือนกันในทุกแพลตฟอร์มเหล่านี้



วิธีที่ 1: การค้นหา Terminal สำหรับ ssh

แม้ว่าคุณจะทำงานจากเครื่องเทอร์มินัลมากกว่า แต่ ssh อาจไม่ได้ตระหนักถึงสิ่งนี้ อาจยังคงพยายามมองหาตัวจำลองเทอร์มินัล TTY แม้ว่าคุณจะอยู่ในหน้าต่างพรอมต์คำสั่งก็ตาม ลองจำลองข้อผิดพลาดเพื่อทดสอบสิ่งนี้ เรากำหนดค่าเครื่องเสมือนเพื่อใช้เป็นตัวอย่างและเรียกใช้ ssh user@linuxtest.example 'sudo /var/mail/startup.sh' เป็นการทดสอบ โดยปกติคุณจะต้องเปลี่ยนคำสั่งและบรรทัด ssh เป็นสิ่งที่ตรงกับสิ่งที่คุณกำลังพยายามทำ



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

ลองเพิ่ม -t หลัง ssh เพื่อแก้ไขข้อผิดพลาดทางไวยากรณ์ของคุณ เก้าครั้งจากสิบสิ่งนี้จะบังคับให้ ssh จัดสรร TTY เสมือนให้กับตัวเองและแสร้งทำเป็นว่ามันกำลังทำงานอยู่ภายในเทอร์มินัลจริง คุณไม่จำเป็นต้องเปลี่ยนแปลงสิ่งอื่นใดเกี่ยวกับคำสั่งของคุณ เพียงเพิ่มตัวเลือก -t หลังตัวอักษร ssh จากนั้นให้โฮสต์และส่งผ่านคำสั่งเหมือนเดิม นอกจากนี้คุณควรคำนึงถึงสิ่งนี้ด้วยหากคุณต้องเรียกใช้ ssh ในส่วนหลังของคำสั่ง



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

วิธีที่ 2: การแก้ไขไฟล์ visudo

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

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

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

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

อ่าน 3 นาที