Không thể khởi tạo frontend: hộp thoại khi sử dụng ssh


52

Tôi đang thực hiện lệnh sau trên ssh trong môi trường thử nghiệm, với quyền root:

ssh <remote_srv> "apt-get autoremove"

Trong sshd_config của tôi, tôi có "PermitRootLogin không có mật khẩu" và tôi đã thêm id_rsa.pub của root vào tệp ủy quyền trên máy chủ từ xa.

Tuy nhiên, tôi nhận được các lỗi sau:

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

Tôi đã tìm kiếm điều này trong các trang ssh của ssh, nhưng không thể nào bận tâm về lời giải thích về các thuật ngữ giả và ttys.

Có ai có thể giải thích các lỗi trên? Tôi đoán đó là một lựa chọn còn thiếu, nhưng cái nào?

Cả hai nền tảng là Ubuntu 14.04 LTS.

Câu trả lời:


62

Tôi tin rằng nó có một cái gì đó để làm với thực tế apt-get autoremovelà đang được chạy trong một vỏ không tương tác. Xem Có phải nó sở hữu để trả lời các câu hỏi hộp thoại khi cài đặt dưới docker không?

Giải pháp có vẻ là tiền tố lệnh với DEBIAN_FRONTEND=noninteractive:

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

12
Điều này xảy ra khi sử dụng apt-get trong quá trình cài đặt docker, thêm tiền tố, hoạt động rất tốt
Neil McGill

Cảm ơn bạn đã bình luận Neil. Tôi cảm thấy như mình bị lạc đường nhưng tôi gặp phải vấn đề tương tự khi sử dụng apt-get trong quá trình cài đặt docker.
Qcom

13

Giải pháp của Alex không khắc phục được lỗi và anh ấy gần như đã hiểu đúng, nhưng nó không cho phép bạn trả lời bất kỳ câu hỏi nào (điều này tốt khi bạn đã đoán trước các câu trả lời và đang chạy từ một tập lệnh, nhưng thực sự khó chịu khi bạn đang thử các gói mới ). Vấn đề cốt lõi là sự tương tác giữa các giả định được tạo bởi các mặt trận khác nhau của ssh và debconf.

Hãy bắt đầu với ssh. ssh giả định rằng khi bạn không chỉ định một lệnh từ xa, bạn muốn một pty ở đầu từ xa và bạn chỉ định một điều khiển từ xa mà bạn không (hoạt động rất tốt 90% thời gian, không phải là điều này). Điều này có thể được ghi đè bằng -ttùy chọn buộc pty hoặc -Ttùy chọn buộc không có pty (hoặc tùy chọn tệp cấu hình tương ứng). Hơn nữa khi sử dụng pty, TERMbiến môi trường được sao chép (ngoại lệ có thể áp dụng tài liệu kiểm tra để biết chi tiết hoàn thành và mẫu nhập cảnh rút thăm trúng thưởng chính thức). Cũng cần lưu ý -xtùy chọn vô hiệu hóa chuyển tiếp X11 và -Xcho phép nó.

Bản thân Debconf không có yêu cầu tương tác (theo thiết kế), nhưng các mặt trận khác nhau, và mỗi loại có các yêu cầu khác nhau.

Tôi tin rằng giao diện đẹp nhất là gnome (cũng có một giao diện ked mà tôi đã không làm việc). Frontend gnome (và kde one) cũng yêu cầu một số thư viện không mặc định và máy chủ X11, do đó dòng lệnh để buộc frontend gnome (một khi các thư viện thích hợp được cài đặt) sẽ

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

hoặc nếu bạn thích kde

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

Giao diện hộp thoại (mặc định) yêu cầu pty và thiết bị đầu cuối có mức chức năng tối thiểu được chỉ định trong biến TERM (trong thực tế, đây là bất cứ điều gì có mô tả terminfo hoàn chỉnh trừ câm).

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

hoặc là

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

frontend readline có các yêu cầu ít nghiêm ngặt hơn và sẽ hoạt động với các thiết bị đầu cuối câm, nhưng sẽ cần một pty.

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

Frontend biên tập viên phụ thuộc vào một trình soạn thảo sẽ có các yêu cầu cụ thể tùy thuộc vào trình soạn thảo.

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"

Frontend không tương tác không có yêu cầu nhưng nó không hỏi bất kỳ câu hỏi nào (có thể hoặc không thể là những gì bạn muốn).

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

"lối vào đường biên có các yêu cầu ít nghiêm ngặt hơn và sẽ hoạt động với các thiết bị đầu cuối câm, nhưng sẽ cần một pty." Bạn có thể giải thích làm thế nào tôi có thể thiết lập một pty?
linuxatico

@linuxatico, ssh -tđể biết thêm chi tiết và các tùy chọn khác hãy xem trang ssh man. Cũng đọc lại đoạn thứ hai của câu trả lời này.
hildred
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.