ไม่สามารถเริ่มต้นส่วนหน้า: โต้ตอบเมื่อใช้ ssh


52

ฉันกำลังดำเนินการคำสั่งต่อไปนี้ผ่าน ssh ในสภาพแวดล้อมการทดสอบเป็นราก:

ssh <remote_srv> "apt-get autoremove"

ใน sshd_config ของฉันฉันมี "PermitRootLogin ที่ไม่มีรหัสผ่าน" และฉันได้เพิ่ม id_rsa.pub ของรูทไปยังไฟล์ authorized_keys บนเซิร์ฟเวอร์ระยะไกล

อย่างไรก็ตามฉันได้รับข้อผิดพลาดดังต่อไปนี้:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype

ฉันค้นหาสิ่งนี้ในหน้าคนของ ssh แต่ไม่สามารถปิดใจของฉันเกี่ยวกับคำอธิบายเกี่ยวกับเงื่อนไขปลอมและ ttys

มีใครบ้างที่สามารถอธิบายข้อผิดพลาดได้ ฉันเดาว่ามันเป็นตัวเลือกที่ขาดหายไป แต่อันไหน

ทั้งสองแพลตฟอร์มคือ Ubuntu 14.04 LTS

คำตอบ:


62

ฉันเชื่อว่ามีบางอย่างเกี่ยวข้องกับความจริงที่apt-get autoremoveกำลังทำงานอยู่ในเชลล์แบบไม่มีการโต้ตอบ ดูที่การตอบคำถามกล่องโต้ตอบเมื่อติดตั้งภายใต้นักเทียบท่า?

วิธีแก้ปัญหาดูเหมือนจะเป็นการเติมคำสั่งด้วยDEBIAN_FRONTEND=noninteractive:

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"

12
สิ่งนี้เกิดขึ้นเมื่อใช้ apt-get ในระหว่างการติดตั้ง docker เพิ่มคำนำหน้าใช้งานได้ดี
Neil McGill

ขอบคุณสำหรับความคิดเห็นนีล ฉันรู้สึกเหมือนฉันหลงทาง แต่ฉันพบปัญหาเดียวกันเมื่อใช้ apt-get ระหว่างการติดตั้ง docker
Qcom

13

โซลูชันของ Alex ช่วยระงับข้อผิดพลาดและเขาเกือบจะได้รับสาเหตุ แต่ไม่อนุญาตให้คุณตอบคำถามใด ๆ (ซึ่งใช้ได้เมื่อคุณคาดเดาคำตอบและทำงานจากสคริปต์ แต่น่ารำคาญจริง ๆ เมื่อคุณลองแพ็คเกจใหม่ ) ประเด็นหลักคือการมีปฏิสัมพันธ์ระหว่างสมมติฐานที่ทำโดย ssh และ debconf ของส่วนหน้าต่างๆ

เริ่มต้นด้วย ssh ssh สมมติว่าเมื่อคุณไม่ได้ระบุคำสั่งรีโมตคุณต้องการ pty บนรีโมตรีโมตและคุณระบุรีโมตที่คุณไม่ต้องการ (ซึ่งทำงานได้ดีมาก 90% ของเวลาไม่ใช่แค่อันนี้) สิ่งนี้สามารถแทนที่ได้โดย-tตัวเลือกที่บังคับให้ pty หรือ-Tตัวเลือกที่บังคับให้ไม่มี pty (หรือตัวเลือกไฟล์ปรับแต่งที่เกี่ยวข้อง) นอกจากนี้เมื่อใช้ pty TERMตัวแปรสภาพแวดล้อมจะถูกคัดลอก (อาจมีข้อยกเว้นเอกสารการตรวจสอบสำหรับรายละเอียดที่สมบูรณ์และแบบฟอร์มการชิงโชคเป็นทางการ) นอกจากนี้ยังทราบว่า-xตัวเลือกปิดใช้งานการส่งต่อ X11 และ-Xเปิดใช้งาน

Debconf ไม่มีข้อกำหนดด้านการโต้ตอบ (ตามการออกแบบ) แต่ส่วนหน้าต่าง ๆ ทำและแต่ละคนมีข้อกำหนดที่แตกต่างกัน

ฉันเชื่อว่าส่วนหน้าที่ดูดีที่สุดคือคำพังเพย (นอกจากนี้ยังมีส่วนหน้า ked ที่ฉันไม่ได้ทำงาน) ส่วนหน้า gnome (และ kde หนึ่งเช่นกัน) ต้องการบางไลบรารีที่ไม่ใช่ค่าเริ่มต้นและเซิร์ฟเวอร์ X11 ดังนั้นบรรทัดคำสั่งเพื่อบังคับใช้ส่วนหน้า gnome (เมื่อติดตั้งไลบรารีที่เหมาะสม) จะเป็น

ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"

หรือถ้าคุณชอบ kde

ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"

ส่วนหน้าโต้ตอบ (ค่าเริ่มต้น) ต้องมี pty และเทอร์มินัลที่มีระดับการทำงานขั้นต่ำที่ระบุไว้ในตัวแปร TERM (ในทางปฏิบัตินี่คือทุกสิ่งที่มีคำอธิบาย terminfo ที่สมบูรณ์ยกเว้นใบ้)

ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"

หรือ

ssh -t <remote_srv> "apt-get autoremove"

ส่วนหน้า readline มีข้อกำหนดที่เข้มงวดน้อยกว่าและจะทำงานกับเทอร์มินัลโง่ แต่จะต้องมี pty

ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"

ส่วนหน้าของตัวแก้ไขขึ้นอยู่กับตัวแก้ไขซึ่งจะมีข้อกำหนดเฉพาะขึ้นอยู่กับตัวแก้ไข

ssh -t <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=vi apt-get autoremove"
ssh -X <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=gvim\ -f apt-get autoremove"

ส่วนหน้าแบบไม่มีการโต้ตอบไม่มีข้อกำหนด แต่มันไม่ได้ถามคำถามใด ๆ (ซึ่งอาจหรืออาจไม่ใช่สิ่งที่คุณต้องการ)

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"

"ส่วนหน้า readline มีข้อกำหนดที่เข้มงวดน้อยกว่าและจะทำงานกับเทอร์มินัลโง่ แต่จะต้องมี pty" คุณช่วยอธิบายวิธีตั้ง pty ได้ไหม?
linuxatico

@linuxatico ssh -tสำหรับรายละเอียดเพิ่มเติมและตัวเลือกอื่น ๆ ดูที่หน้า man ssh โปรดอ่านย่อหน้าที่สองของคำตอบนี้ด้วย
hildred
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.