แก้ไข: Pseudo-terminal จะไม่ถูกจัดสรรเนื่องจาก stdin ไม่ใช่เทอร์มินัล



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

ในกรณีส่วนใหญ่คุณจะได้รับข้อผิดพลาด 'pseudo-terminal จะไม่ได้รับการจัดสรรที่สับสนเนื่องจาก stdin ไม่ใช่เทอร์มินัล' เกิดข้อผิดพลาดเฉพาะเมื่อคุณเรียกใช้คำสั่ง SSH บางประเภทจากสคริปต์ หากคุณใช้คำสั่งเดียวกันจากบรรทัดคำสั่งคำสั่งอาจทำงานได้ดี



ก่อนดำเนินการเพิ่มเติมตรวจสอบให้แน่ใจว่าคุณได้เพิ่มคีย์สาธารณะของคุณไปยังตัวแทน SSH แล้วลองใช้ ssh อีกครั้ง คุณอาจเพิ่งทำกุญแจหายไป ในทางกลับกันหากไม่ได้ผลคุณจะต้องแก้ไขปัญหาเล็กน้อยในสคริปต์ของคุณ



วิธีที่ 1: บังคับและปิดใช้งานการจัดสรรหลอก tty

มีตัวเลือกบรรทัดคำสั่งคู่หนึ่งที่อาจแก้ปัญหาให้คุณได้อย่างรวดเร็ว ลอง ssh -t -t -R ตามด้วยสิ่งที่เหลือที่คุณพยายามเชื่อมต่อเพื่อบังคับให้มีการจัดสรรเทอร์มินัลหลอก ตัวอย่างเช่นสมมติว่าคุณกำลังจะใช้ ssh -p 80 appuals@ssh.example.com เพื่อลงชื่อเข้าใช้บัญชีของคุณบน example.com ซึ่งแน่นอนว่าเป็นเพียงตัวอย่างสำหรับเอกสารที่ไม่มีอยู่จริง



ลองวิ่งเช่น ssh -t -t -R -p 80 appuals@ssh.example.com และดูว่าวิธีนี้ช่วยแก้ปัญหาได้หรือไม่ แน่นอนคุณจะต้องแทนที่ชื่อด้วยบัญชีจริงและชื่อโฮสต์ของคุณเพื่อที่จะเข้าสู่ระบบได้สำเร็จ สิ่งนี้บังคับให้มีการจัดสรรเทอร์มินัลดังนั้นคุณไม่ควรเห็นว่าเทอร์มินัลหลอกจะไม่ได้รับการจัดสรรเนื่องจาก stdin ไม่ใช่ข้อผิดพลาดของเทอร์มินัล

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

ไม่ว่าจะเป็นเรื่องที่น่าผิดหวังอย่างแน่นอนดังนั้นให้ใช้ Ctrl + C เพื่อฆ่ากระบวนการนี้



เทอร์มินัลหลอก

คุณสามารถลองใช้สวิตช์ -t เพียงตัวเดียวหรือเพิ่มจำนวนก็ได้ หากไม่ได้ผลให้แทนที่สวิตช์ -t ใด ๆ ด้วยสวิตช์ a -T ในคำสั่งเช่น ssh -T -R -p 80 appuals@ssh.example.com และดูว่าได้ผลหรือไม่

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

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

วิธีที่ 2: ใช้ sshpass

บางคนอาจพบว่าสคริปต์ของตนทำงานได้ดีขึ้นเมื่อใช้คำสั่ง sshpass ซึ่งจะไม่รวมอยู่ในค่าเริ่มต้น คุณสามารถติดตั้งด้วย sudo apt-get install sshpass หรือ sudo yum install sshpass ได้ตลอดเวลาหากคุณต้องการทดลองใช้หรือเพราะคุณต้องการมันสำหรับกรณีการใช้งานเฉพาะของคุณ

หากคุณยังไม่ได้ใช้งานแสดงว่าคุณไม่จำเป็นต้องใช้ อย่างไรก็ตามคุณสามารถใช้เทคนิคเดียวกันกับข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับการจัดสรรเทอร์มินัลหลอกในสภาพแวดล้อมแบบนี้ได้เช่นกัน

ตัวอย่างเช่นใช้ sshpass -p password ssh -T appuals@ssh.example.com เพื่อบังคับให้ระบบทำงานจากภายในสคริปต์ของคุณ

วิธีที่ 3: แก้ไขข้อผิดพลาดในการจัดการงาน

ในบางครั้งคุณอาจได้รับข้อความแสดงข้อผิดพลาดอื่นแม้ว่าจะแก้ไขทั้งหมดนี้แล้วก็ตาม หากคุณได้รับคำเตือนว่าไม่มีสิทธิ์เข้าถึง tty จากนั้นคุณจะได้รับการเตือนว่าไม่มีการควบคุมงานในเชลล์ของคุณคุณควรจะทำงานได้ตามปกติ

ข้อผิดพลาดนี้เกิดจากสิ่งผิดปกติบนเซิร์ฟเวอร์ระยะไกลที่เกี่ยวข้องกับ csh, tcsh หรือแม้แต่ Almquist หรือเชลล์อื่น ๆ คุณอาจไม่ได้สังเกตเห็นมันเนื่องจากคุณได้รับข้อความแสดงข้อผิดพลาดอื่น ๆ แต่หากคุณไม่เห็นคนอื่น ๆ เกี่ยวกับเครื่องเทอร์มินัลหลอกควรเป็นไปได้ที่จะดำเนินการต่อในลักษณะที่ปกติ

คุณอาจไม่ต้องการลองใช้ Ctrl + Z ในกรณีนี้เพื่อหยุดกระบวนการเนื่องจากอาจไม่มีวิธีใดที่จะเริ่มต้นการสำรองข้อมูลอีกครั้ง หากคุณได้รับข้อความแสดงข้อผิดพลาดที่แจ้งว่ามีงานที่หยุดเมื่อคุณออกคุณจะไม่ได้รับอนุญาตให้ออกจากระบบ

หยุดงาน

ใช้คำสั่ง ps และ kill เพื่อปิดงานที่คุณไม่สามารถปิดได้โดยสมมติว่าคุณไม่คิดที่จะสูญเสียงานในกระบวนการนี้ คุณจะสามารถออกได้ทันที

แท็ก วิธีใช้ Linux ssh อ่าน 3 นาที