Computer >> คอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

แก้ไข:sudo:ไม่มี tty ปัจจุบันและไม่มีโปรแกรม askpass ที่ระบุ

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

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

วิธีที่ 1:ค้นหาเทอร์มินัลสำหรับ ssh

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

แก้ไข:sudo:ไม่มี tty ปัจจุบันและไม่มีโปรแกรม askpass ที่ระบุ

คุณจะต้องแน่ใจว่าคุณกำลังลงชื่อเข้าใช้เซิร์ฟเวอร์ที่คุณคิดว่าเป็นอยู่ ตรวจสอบเพื่อดูว่าคุณยังได้รับ sudo:no tty present และไม่มีโปรแกรม 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 มีคำว่าใช่อยู่ด้านหลัง หากนี่เป็นบรรทัดสุดท้ายในไฟล์ของคุณ ให้ตรวจสอบให้แน่ใจว่ามีการขึ้นบรรทัดใหม่ที่ว่างเปล่าหลังจากนั้น GNU nano ทำงานนี้โดยอัตโนมัติตามค่าเริ่มต้น

แก้ไข:sudo:ไม่มี tty ปัจจุบันและไม่มีโปรแกรม askpass ที่ระบุ

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