Remediere: Pseudo-terminalul nu va fi alocat deoarece stdin nu este un terminal

În majoritatea cazurilor, veți primi o eroare confuză „pseudo-terminalul nu va fi alocat deoarece stdin nu este un terminal” numai atunci când executați un fel de comandă SSH dintr-un script. Dacă rulați aceeași comandă din linia de comandă, atunci ar putea funcționa perfect.

Înainte de a merge mai departe, asigurați-vă că ați adăugat cheia publică la agentul SSH și apoi încercați să utilizați din nou ssh. S-ar putea să fi lipsit o cheie. Pe de altă parte, dacă acest lucru nu funcționează, va trebui să faceți o mică depanare în script.

Metoda 1: Forțarea și dezactivarea alocării pseudo-tty

Există o pereche de opțiuni din linia de comandă care ar putea rezolva problema rapid pentru dvs. Încercați ssh -t -t -R urmat de restul a ceea ce încercați să vă conectați pentru a forța alocarea pseudo-terminală. De exemplu, să presupunem că urmați să utilizați ssh -p 80 [email protected] pentru a vă conecta la contul dvs. pe example.com, care, desigur, este un manechin pentru documentația care nu există.

Încercați să rulați de ex. Ssh -t -t -R -p 80 [email protected] și vedeți dacă acest lucru remediază problema. Desigur, va trebui să înlocuiți numele cu contul dvs. real și cu numele de gazdă pentru a vă conecta cu succes la sistem. Acest lucru forțează alocarea unui terminal, deci nu ar trebui să vedeți că pseudo-terminalul nu va fi alocat deoarece stdin nu este o eroare de terminal.

Pe de altă parte, ați putea ajunge doar cu un șir constant de mesaje de eroare. Unii utilizatori au remarcat că acest lucru ar putea fi considerat amuzant.

Cu siguranță este frustrant, indiferent, așa că folosiți Ctrl + C pentru a ucide procesul.

Puteți încerca fie să folosiți un singur comutator de o t, fie să măriți numărul. Dacă acest lucru nu funcționează, atunci înlocuiți orice comutatoare -t cu un comutator -T în comandă, de ex. Ssh -T -R -p 80 [email protected] și vedeți dacă funcționează.

Această metodă dezactivează întregul proces de alocare a pseudo-terminalului, așa că ar putea funcționa în cazurile în care forțarea nu o face. Desigur, nimic din toate acestea nu ar trebui să fie o problemă din linia de comandă, dar asigurați-vă că faceți o notă atunci când găsiți ce opțiune funcționează din scriptul dvs., astfel încât să îl puteți utiliza în orice scripturi viitoare pe care trebuie să le rulați pentru a accesa serverul menționat.

Deoarece comanda ssh a dat acestor două opțiuni opuse nume similare, amintiți-vă că -t forțează alocarea pseudo-terminalelor în timp ce -T o dezactivează. Aceste opțiuni sunt sensibile la majuscule și minuscule și sunt deseori necesare din interiorul scripturilor, deoarece ssh are nevoie de un terminal TTY tradițional pentru a funcționa. Bineînțeles, în cazul dvs., veți utiliza emulatorul de terminal în acest scop.

Metoda 2: Utilizarea sshpass

Unii oameni ar putea găsi că scripturile lor funcționează mai bine cu comanda sshpass, care nu este inclusă implicit. Puteți să-l instalați întotdeauna cu sudo apt-get install sshpass sau sudo yum install sshpass dacă preferați să încercați sau pentru că aveți nevoie de el pentru cazul dvs. de utilizare specific.

Dacă nu îl utilizați deja, atunci probabil că nu aveți nevoie de el. Cu toate acestea, puteți utiliza aceleași tehnici pentru a surprinde mesajele de eroare legate de alocarea pseudo-terminală și în acest tip de mediu.

De exemplu, utilizați parola sshpass -p ssh -T [email protected] pentru a forța sistemul să funcționeze din interiorul scriptului.

Metoda 3: remedierea erorilor de gestionare a lucrărilor

Uneori este posibil să primiți un alt mesaj de eroare chiar și după ce ați remediat toate acestea. Dacă primiți un avertisment care nu citește acces la tty și vi se reamintește că nu există control al jobului în shell-ul dvs., ar trebui să puteți lucra oarecum normal.

Această eroare este cauzată de ceva neregulat pe serverul de la distanță legat fie de csh, tcsh sau, eventual, de Almquist sau de alt shell. Este posibil să nu fi observat acest lucru pentru că primeați alte mesaje de eroare, dar cu condiția să nu vedeți altele despre pseudo-terminale, ar trebui să puteți continua relativ așa cum ați face de obicei.

Este posibil să nu doriți să încercați să utilizați Ctrl + Z în acest caz pentru a opri procesele, deoarece este posibil să nu existe nicio modalitate de a le relua din nou. Dacă primiți un mesaj de eroare care arată că sunt lucrări oprite la ieșire, atunci nu vi se va permite să vă deconectați.

Utilizați comenzile ps și kill pentru a închide orice lucrări pe care nu le puteți închide, presupunând că nu vă deranjează să pierdeți munca în proces. Veți putea ieși acum.

Etichetează Linux-how ssh