Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Linux

Sửa Lỗi: Pseudo-terminal Will Not Be Allocated Because Stdin Is Not A Terminal

Thường gặp lỗi pseudo-terminal will not be allocated because stdin is not a terminal chỉ khi chạy lệnh SSH từ script. Chạy cùng lệnh từ command line thì thường ổn.

Trước tiên, đảm bảo đã thêm public key vào SSH agent, thử ssh lại. Có thể chỉ thiếu key. Nếu không được, cần troubleshoot script.

Phương pháp 1: Buộc & Vô hiệu cấp phát pseudo-tty

Có cặp tùy chọn dòng lệnh có thể khắc phục nhanh. Thử ssh -t -t -R theo sau bởi phần còn lại của lệnh kết nối để buộc cấp phát pseudo-terminal. Ví dụ: ssh -p 80 user@ssh.example.com (example.com giả định cho tài liệu).

Thử chạy: ssh -t -t -R -p 80 user@ssh.example.com xem có khắc phục không. Thay tên user và hostname thực để đăng nhập thành công. Buộc cấp phát terminal, không thấy lỗi pseudo-terminal.

Ngược lại, có thể gặp chuỗi lỗi liên tục. Một số user cho là thú vị.

Rất khó chịu, dùng Ctrl+C kill tiến trình.

Sửa Lỗi: Pseudo-terminal Will Not Be Allocated Because Stdin Is Not A Terminal

Thử chỉ một -t hoặc tăng số lượng. Nếu không được, thay -t bằng -T trong lệnh, vd: ssh -T -R -p 80 user@ssh.example.com xem có hiệu quả không.

Phương pháp này vô hiệu hóa hoàn toàn quá trình cấp phát pseudo-terminal, có thể hoạt động khi buộc không được. Tất nhiên command line không nên có vấn đề, nhưng hãy ghi nhớ tùy chọn nào hoạt động từ script để dùng cho script sau.

Vì ssh đặt tên hai tùy chọn đối lập tương tự, nhớ: -t buộc cấp phát pseudo-terminals, -T vô hiệu hóa. Phân biệt chữ hoa/thường, thường cần trong script vì ssh cần TTY truyền thống. Trong trường hợp bạn dùng terminal emulator cho mục đích này.

Phương pháp 2: Dùng sshpass

Một số người thấy script hoạt động tốt hơn với lệnh sshpass (mặc định không có). Cài bằng sudo apt-get install sshpass hoặc sudo yum install sshpass nếu muốn thử hoặc cần cho trường hợp cụ thể.

Nếu chưa dùng, có thể không cần. Tuy nhiên, cùng kỹ thuật xử lý lỗi pseudo-terminal allocation trong môi trường này.

Ví dụ: sshpass -p password ssh -T user@ssh.example.com buộc hệ thống chạy từ trong script.

Phương pháp 3: Sửa lỗi quản lý job

Đôi khi vẫn gặp lỗi khác sau khi sửa xong. Nhận cảnh báo no access to tty rồi nhắc no job control in your shell vẫn có thể làm việc tương đối bình thường.

Lỗi do bất thường trên remote server liên quan đến csh, tcsh hoặc có thể Almquist shell khác. Có thể không nhận ra vì bị che bởi lỗi khác, nhưng miễn không còn lỗi pseudo-terminal thì có thể tiếp tục tương đối bình thường.

Không nên dùng Ctrl+Z dừng tiến trình trong trường hợp này, vì có thể không khởi động lại được. Nếu báo there are stopped jobs khi exit, không được logout.

Sửa Lỗi: Pseudo-terminal Will Not Be Allocated Because Stdin Is Not A Terminal

Dùng lệnh ps và kill đóng job không tắt được (chấp nhận mất công việc). Sau đó thoát được.