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

Khắc phục:Pseudo-terminal sẽ không được cấp phát vì stdin không phải là terminal

Trong hầu hết các trường hợp, bạn sẽ nhận được một lỗi khó hiểu "giả thiết bị đầu cuối sẽ không được cấp phát vì stdin không phải là đầu cuối" chỉ khi bạn đang chạy một số loại lệnh SSH từ một tập lệnh. Nếu bạn đang chạy cùng một lệnh từ dòng lệnh thì nó có thể hoạt động hoàn toàn tốt.

Trước khi tiếp tục, hãy đảm bảo rằng bạn đã thêm khóa công khai của mình vào SSH agent và sau đó thử sử dụng lại ssh. Bạn có thể vừa thiếu một chìa khóa. Mặt khác, nếu cách này không hiệu quả thì bạn cần thực hiện một chút khắc phục sự cố trong tập lệnh của mình.

Phương pháp 1:Buộc và vô hiệu hóa Phân bổ giả tty

Có một số tùy chọn dòng lệnh có thể khắc phục sự cố nhanh chóng cho bạn. Hãy thử ssh -t -t -R tiếp theo là phần còn lại của những gì bạn đang cố gắng kết nối để buộc phân bổ đầu cuối giả. Ví dụ:giả sử bạn sẽ sử dụng ssh -p 80 appuals@ssh.example.com để đăng nhập vào tài khoản của mình trên example.com, tất nhiên điều này là giả cho tài liệu không tồn tại.

Hãy thử chạy v.d. ssh -t -t -R -p 80 appuals@ssh.example.com và xem điều này có khắc phục được sự cố không. Tất nhiên, bạn sẽ cần thay thế tên bằng tài khoản thực và tên máy chủ của mình để đăng nhập thành công vào hệ thống. Điều này buộc phải phân bổ một thiết bị đầu cuối, vì vậy bạn sẽ không thấy thiết bị đầu cuối giả sẽ không được cấp phát vì stdin không phải là lỗi đầu cuối.

Mặt khác, bạn có thể chỉ nhận được một chuỗi thông báo lỗi liên tục. Một số người dùng đã nhận xét rằng điều này có thể được coi là thú vị.

Mặc dù vậy, chắc chắn điều đó rất khó chịu, vì vậy hãy sử dụng Ctrl + C để kết thúc quá trình.

Khắc phục:Pseudo-terminal sẽ không được cấp phát vì stdin không phải là terminal

Bạn có thể thử chỉ sử dụng công tắc một -t hoặc tăng số lượng. Nếu điều này không hiệu quả, thì hãy thay thế bất kỳ công tắc -t nào bằng một công tắc -T trong lệnh, ví dụ:ssh -T -R -p 80 appuals@ssh.example.com và xem cách đó có hoạt động không.

Phương pháp này vô hiệu hóa hoàn toàn toàn bộ quy trình phân bổ đầu cuối giả, vì vậy nó có thể hoạt động trong những trường hợp buộc phải không thực hiện. Tất nhiên, không có vấn đề nào trong số này phải là vấn đề từ dòng lệnh, nhưng hãy nhớ ghi chú khi bạn tìm thấy tùy chọn nào hoạt động từ tập lệnh của mình để bạn có thể sử dụng nó trong bất kỳ tập lệnh nào trong tương lai mà bạn phải chạy để truy cập vào máy chủ đã nói.

Vì lệnh ssh đặt tên cho hai tùy chọn đối lập này, hãy nhớ rằng -t buộc phân bổ các thiết bị đầu cuối giả trong khi -T vô hiệu hóa nó. Các tùy chọn này phân biệt chữ hoa chữ thường và chúng thường cần thiết từ bên trong các tập lệnh vì ssh cần một thiết bị đầu cuối TTY truyền thống để hoạt động. Đương nhiên, trong trường hợp của bạn, bạn sẽ sử dụng trình mô phỏng thiết bị đầu cuối cho mục đích này.

Phương pháp 2:Sử dụng sshpass

Một số người có thể thấy rằng tập lệnh của họ hoạt động tốt hơn với lệnh sshpass, lệnh này không được bao gồm theo mặc định. Bạn luôn có thể cài đặt nó bằng sudo apt-get install sshpass hoặc sudo yum install sshpass nếu bạn muốn dùng thử hoặc vì bạn cần nó cho trường hợp sử dụng cụ thể của mình.

Nếu bạn chưa sử dụng nó, thì có thể bạn không cần nó. Tuy nhiên, bạn cũng có thể sử dụng các kỹ thuật tương tự để xử lý các thông báo lỗi liên quan đến phân bổ đầu cuối giả trong loại môi trường này.

Ví dụ:sử dụng mật khẩu sshpass -p ssh -T appuals@ssh.example.com để buộc hệ thống hoạt động từ bên trong tập lệnh của bạn.

Phương pháp 3:Sửa lỗi quản lý công việc

Đôi khi, bạn có thể nhận được một thông báo lỗi khác ngay cả khi đã sửa tất cả những điều này. Nếu bạn nhận được cảnh báo có nội dung không có quyền truy cập vào tty và sau đó bạn được nhắc rằng không có quyền kiểm soát công việc trong trình bao của bạn, bạn sẽ có thể làm việc bình thường.

Lỗi này là do một cái gì đó không thường xuyên trên máy chủ từ xa liên quan đến csh, tcsh hoặc thậm chí có thể là Almquist hoặc trình bao khác. Bạn có thể không nhận thấy điều đó vì bạn nhận được các thông báo lỗi khác, nhưng với điều kiện là bạn không thấy bất kỳ thông báo lỗi nào khác về thiết bị đầu cuối giả thì bạn có thể tiếp tục tương đối giống như cách bạn thường làm.

Tuy nhiên, bạn có thể không muốn thử sử dụng Ctrl + Z trong trường hợp này để dừng các quá trình vì có thể không có cách nào để bắt đầu sao lưu lại. Nếu bạn nhận được thông báo lỗi cho biết có công việc đã dừng khi bạn thoát ra, thì bạn sẽ không được phép đăng xuất.

Khắc phục:Pseudo-terminal sẽ không được cấp phát vì stdin không phải là terminal

Sử dụng lệnh ps và lệnh kill để đóng bất kỳ công việc nào bạn không thể đóng, giả sử bạn không ngại mất công việc trong quá trình này. Bạn có thể thoát ngay bây giờ.