Dòng ra no tty present and no askpass program specified là một trong những thông báo lỗi ssh không mấy hữu ích vì nó không đi thẳng vào nguyên nhân. Khá có thể bạn đang làm việc với TTY hợp lệ nào đó khi thấy thông báo và bạn đã từng nhập mật khẩu sudo qua ssh bình thường. Bạn nhiều khả năng đang gặp lỗi cú pháp, nhưng thông báo không trực tiếp nói rõ điều này.
Vì đây là vấn đề liên quan đến chính ssh, bạn nhiều khả năng tái hiện được trên Linux, FreeBSD, macOS và dịch vụ Unix của Cygwin trên Windows. May mắn là cách sửa nên khá giống nhau trên tất cả các nền tảng này.
Cách 1: Tìm terminal cho ssh
Mặc dù bạn nhiều khả năng đang làm việc từ terminal, ssh có thể không nhận ra điều đó. Nó có thể vẫn cố tìm trình giả lập terminal TTY mặc dù bạn đang trong cửa sổ dòng lệnh. Thử tái hiện lỗi để test. Chúng tôi cấu hình máy ảo làm ví dụ và chạy ssh user@linuxtest.example 'sudo /var/mail/startup.sh' để test. Tự nhiên, bạn muốn thay lệnh và dòng ssh cho phù hợp với việc bạn làm.

Bạn muốn đảm bảo đang đăng nhập vào server mình nghĩ. Dù sao, kiểm tra xem vẫn nhận được lỗi sudo: no tty present and no askpass program specified không. Nhiều khả năng nếu vẫn nhận, bạn sẽ thấy nó 3 lần và thậm chí được nhắc nhập mật khẩu như khi chạy sudo cục bộ trên Debian/Ubuntu.
Thử thêm -t sau ssh để sửa lỗi cú pháp. Chín lần trên mười điều này sẽ buộc ssh cấp phát TTY ảo cho chính nó và giả vờ chạy trong terminal thật. Bạn không cần thay đổi gì khác về lệnh. Chỉ thêm tùy chọn -t sau chữ ssh rồi giữ host và lệnh truyền đi như cũ. Hãy nhớ điều này nếu bạn phải chạy ssh ở phần sau của lệnh.
Ví dụ, nếu bạn gặp lỗi tương tự khi chạy lệnh dạng ssh -t user@linuxtest.example 'ssh user@linuxtest2.example', bạn phải giữ -t sau ssh đầu tiên để ngăn chặn. Lưu ý: nếu sau này bạn thay lệnh thứ hai để sinh hoặc tiêu thụ dữ liệu, bạn không nên dùng -t nữa. Ví dụ, nếu chạy cat thay vì script thì bỏ -t vì không cần cấp terminal cho việc đó.
Cách 2: Sửa file visudo
Bạn cũng có thể gặp vấn đề cấu hình sinh ra lỗi này. Sửa file visudo bằng lệnh sudo visudo, và nhớ không bao giờ sửa file này cách khác. Bạn sẽ thấy dòng có ALL = NOPASSWD theo sau là loại lệnh không cần nhập mật khẩu admin.
Mỗi lệnh riêng biệt cần kết thúc bằng dấu phẩy trừ lệnh cuối cùng trên dòng. Do đó, nếu bạn có dòng như /sbin/poweroff /sbin/start /sbin/stop nó sẽ xem tất cả là một lệnh và ném lỗi. Tương tự, nếu thiếu lệnh bạn đang cố chạy qua ssh thì cũng gặp lỗi này. Làm điều chỉnh cần thiết và lưu file trước khi kiểm tra lỗi còn tái hiện không.
Nếu vẫn còn lỗi sau khi làm và khởi động lại dịch vụ, thử lệnh trong hình dưới và đảm bảo dòng PermitTTY có chữ yes sau nó. Nếu đây là dòng cuối file, đảm bảo có dòng trống newline sau. GNU nano làm tự động mặc định.

Bạn cần khởi động lại dịch vụ liên quan trước khi thử tái hiện lỗi lại.