Computer >> Máy Tính >  >> Xử lý sự cố >> Linux

Đã sửa:sudo:không có tty hiện tại và không có chương trình hỏi đáp nào được chỉ định

Dòng đầu ra không có tty hiện tại và không có chương trình hỏi đáp nào được chỉ định là một trong những thông báo lỗi ssh thực sự không hữu ích vì nó không thực sự đi đến điểm là nguyên nhân gây ra sự cố. Nhiều khả năng là bạn đang thực sự làm việc với một TTY hợp lệ nào đó khi bạn nhìn thấy thông báo và có thể bạn đã xử lý tốt việc nhập mật khẩu sudo của mình qua ssh. Nhiều khả năng bạn đang gặp phải lỗi cú pháp, nhưng thông báo không trực tiếp giải quyết vấn đề này.

Vì đây là sự cố liên quan đến bản thân ssh, bạn sẽ có nhiều khả năng tái tạo sự cố trên các dịch vụ Linux, FreeBSD, macOS và Cygwin’s Unix trên Microsoft Windows. May mắn thay, bản sửa lỗi sẽ khá giống nhau trên tất cả các nền tảng này.

Phương pháp 1:Tìm một thiết bị đầu cuối cho ssh

Trong khi nhiều khả năng bạn đã làm việc từ một thiết bị đầu cuối, ssh có thể không nhận ra điều này. Nó có thể vẫn đang cố gắng tìm kiếm trình mô phỏng thiết bị đầu cuối TTY mặc dù thực tế là bạn đang ở bên trong cửa sổ nhắc lệnh. Hãy thử tái tạo lỗi để kiểm tra điều này. Chúng tôi đã định cấu hình một máy ảo để làm ví dụ và chạy ssh user@linuxtest.example ‘sudo /var/mail/startup.sh’ như một bài kiểm tra. Đương nhiên, bạn sẽ muốn thay đổi dòng lệnh và dòng ssh thành thứ gì đó phù hợp với những gì bạn đang cố gắng thực hiện.

Đã sửa:sudo:không có tty hiện tại và không có chương trình hỏi đáp nào được chỉ định

Bạn sẽ muốn đảm bảo rằng bạn đang đăng nhập vào máy chủ mà bạn nghĩ rằng bạn đang ở đó. Bất kể, hãy kiểm tra xem bạn có còn nhận được thông báo lỗi sudo:no tty hay không và không có thông báo lỗi được chỉ định bởi chương trình hỏi vượt. Nhiều khả năng là nếu bạn vẫn nhận được nó thì bạn sẽ thấy nó ba lần và thậm chí có thể được nhắc nhập mật khẩu của bạn theo cách bạn sẽ có nếu bạn chạy sudo cục bộ trên Debian hoặc Ubuntu.

Hãy thử thêm -t sau ssh để sửa lỗi cú pháp của bạn. Chín lần trong số mười lần, điều này sẽ buộc ssh phân bổ một TTY ảo cho chính nó và giả vờ rằng nó đang chạy bên trong một thiết bị đầu cuối thực. Bạn không phải thay đổi bất kỳ điều gì khác về lệnh của mình. Đơn giản chỉ cần thêm tùy chọn -t sau các ký tự ssh và sau đó giữ nguyên máy chủ lưu trữ và lệnh đã qua. Bạn cũng sẽ muốn ghi nhớ điều này nếu bạn phải chạy ssh trong phần sau của lệnh.

Ví dụ:nếu bạn gặp phải lỗi tương tự như vậy khi chạy lệnh được định dạng là ssh -t user@linuxtest.example ‘ssh user@linuxtest2.example’ bạn sẽ phải giữ tùy chọn -t sau ssh đầu tiên để ngăn chặn nó. Lưu ý rằng nếu sau đó bạn thay đổi lệnh thứ hai để tạo hoặc sử dụng dữ liệu, thì bạn sẽ không muốn sử dụng -t chút nào. Ví dụ:nếu bạn bắt đầu chạy cat thay vì một tập lệnh thì bạn có thể kết xuất -t vì bạn sẽ không cần phân bổ thiết bị đầu cuối cho điều đó.

Phương pháp 2:Vá tệp visudo

Bạn cũng có thể gặp sự cố cấu hình tạo ra lỗi này. Sửa đổi tệp visudo bằng cách phát hành sudo visudo và hãy nhớ rằng bạn sẽ không bao giờ muốn chỉnh sửa tệp này theo bất kỳ cách nào khác. Bạn sẽ tìm thấy một dòng có ALL =NOPASSWD, sau đó là các loại lệnh mà bạn không cần nhập mật khẩu của quản trị viên để chạy.

Mỗi lệnh riêng lẻ cần kết thúc bằng dấu phẩy ngoại trừ lệnh cuối cùng trên dòng. Vì vậy, nếu bạn có nội dung nào đó đọc như / sbin / poweroff / sbin / start / sbin / stop, nó sẽ coi tất cả những điều này như một lệnh duy nhất và ném lỗi cho bạn. Tương tự như vậy, nếu bạn thiếu một lệnh mà bạn đang cố chạy qua ssh thì bạn cũng sẽ gặp phải lỗi này. Thực hiện các điều chỉnh cần thiết và lưu tệp trước khi kiểm tra xem lỗi có còn tái tạo được không.

Nếu bạn vẫn gặp lỗi ngay cả khi đã làm như vậy và khởi động lại dịch vụ, thì hãy thử lệnh sau trong hình ảnh bên dưới và đảm bảo rằng dòng PermitTTY có từ có sau nó. Nếu đây là dòng cuối cùng trong tệp của bạn, thì hãy đảm bảo rằng có một dòng mới trống sau đó. GNU nano thực hiện tác vụ này một cách tự động theo mặc định.

Đã sửa:sudo:không có tty hiện tại và không có chương trình hỏi đáp nào được chỉ định

Bạn sẽ cần khởi động lại mọi dịch vụ có liên quan trước khi cố gắng tái tạo lại thông báo lỗi.