Correzione: lo pseudo-terminale non verrà allocato perché stdin non è un terminale

Nella maggior parte dei casi, riceverai un confuso errore "pseudo-terminale non verrà allocato perché stdin non è un terminale" solo quando esegui una sorta di comando SSH da uno script. Se stai eseguendo lo stesso comando dalla riga di comando, potrebbe funzionare perfettamente.

Prima di procedere, assicurati di aver aggiunto la tua chiave pubblica all'agente SSH e quindi prova a utilizzare nuovamente ssh. Forse ti sei perso una chiave. D'altra parte, se questo non funziona, dovrai eseguire una piccola risoluzione dei problemi nel tuo script.

Metodo 1: forzare e disabilitare l'allocazione pseudo-tty

Ci sono un paio di opzioni della riga di comando che potrebbero risolvere rapidamente il problema per te. Prova ssh -t -t -R seguito dal resto di ciò a cui stavi tentando di connetterti per forzare l'allocazione pseudo-terminale. Ad esempio, supponiamo che stavi per utilizzare ssh -p 80 [email protected] per accedere al tuo account su example.com, che ovviamente è un fittizio per la documentazione che non esiste.

Prova ad eseguire ad esempio ssh -t -t -R -p 80 [email protected] e vedi se questo risolve il problema. Ovviamente dovrai sostituire il nome con il tuo account e nome host effettivi per accedere correttamente al sistema. Questo forza l'allocazione di un terminale, quindi non dovresti vedere che lo pseudo-terminale non verrà allocato perché stdin non è un errore di terminale.

D'altra parte, potresti ritrovarti con una stringa costante di messaggi di errore. Alcuni utenti hanno osservato che questo potrebbe essere considerato divertente.

Tuttavia è certamente frustrante, quindi usa Ctrl + C per terminare il processo.

Puoi provare a utilizzare un solo interruttore -t o ad aumentare il numero. Se questo non funziona, sostituire qualsiasi opzione -t con un'opzione -T nel comando, ad esempio ssh -T -R -p 80 [email protected] e vedere se funziona.

Questo metodo disabilita completamente l'intero processo di allocazione dello pseudo-terminale, quindi potrebbe funzionare nei casi in cui la forzatura non lo fa. Ovviamente, niente di tutto questo dovrebbe essere un problema dalla riga di comando, ma assicurati di prendere nota quando trovi quale opzione funziona dal tuo script in modo da poterla utilizzare in qualsiasi script futuro che devi eseguire per accedere a detto server.

Poiché il comando ssh ha dato a queste due opzioni opposte nomi simili, ricorda che -t forza l'allocazione di pseudo-terminali mentre -T lo disabilita. Queste opzioni fanno distinzione tra maiuscole e minuscole e sono spesso necessarie dall'interno degli script perché ssh necessita di un terminale TTY tradizionale per funzionare. Naturalmente, nel tuo caso useresti il ​​tuo emulatore di terminale per questo scopo.

Metodo 2: utilizzo di sshpass

Alcune persone potrebbero scoprire che i loro script funzionano meglio con il comando sshpass, che non è incluso di default. Puoi sempre installarlo con sudo apt-get install sshpass o sudo yum install sshpass se preferisci provarlo o perché ne hai bisogno per il tuo caso d'uso specifico.

Se non lo stai già usando, probabilmente non ne hai bisogno. Tuttavia, è possibile utilizzare le stesse tecniche per sorprendere i messaggi di errore relativi all'allocazione di pseudo-terminali anche in questo tipo di ambiente.

Ad esempio, usa sshpass -p password ssh -T [email protected] per forzare il sistema a funzionare dall'interno del tuo script.

Metodo 3: correzione degli errori di gestione dei lavori

A volte potresti ricevere un altro messaggio di errore anche dopo aver risolto tutto questo. Se ricevi un avviso che indica che non è possibile accedere a tty e poi ti viene ricordato che non c'è controllo del lavoro nella tua shell, dovresti essere in grado di lavorare normalmente.

Questo errore è causato da qualcosa di irregolare sul server remoto relativo a csh, tcsh o forse anche ad Almquist o ad altre shell. Potresti non averlo notato perché ricevevi altri messaggi di errore, ma a condizione di non vederne altri sugli pseudo-terminali dovrebbe essere possibile continuare relativamente come faresti di solito.

Potresti non voler provare a usare Ctrl + Z in questo caso per interrompere i processi, però, perché potrebbe non esserci modo di riavviarli. Se ricevi un messaggio di errore che legge che ci sono lavori interrotti quando esci, non ti sarà permesso di disconnetterti.

Usa i comandi ps e kill per chiudere tutti i lavori che non puoi chiudere, supponendo che non ti dispiaccia perdere il lavoro nel processo. Ora potrai uscire.

Tag Linux how-to ssh