Popravek: Psevdo-terminal ne bo dodeljen, ker stdin ni terminal
V večini primerov boste dobili zmedeno napako »psevdo-terminal ne bo dodeljen, ker stdin ni terminal« le, ko iz skripta izvajate nekakšen ukaz SSH. Če izvajate isti ukaz iz ukazne vrstice, bo morda deloval popolnoma v redu.
Preden nadaljujete, se prepričajte, da ste v SSH agent dodali svoj javni ključ, in nato znova poskusite uporabiti ssh. Morda ste ravno pogrešali ključ. Po drugi strani pa, če to ne deluje, boste morali v skriptu malo odpraviti težave.
1. način: Prisilno in onemogočanje dodelitve psevdotikov
Obstaja par možnosti ukazne vrstice, ki vam lahko hitro rešijo težavo. Poskusite ssh -t -t -R, čemur sledi preostanek tistega, v kar ste se poskušali povezati, da vsilite psevdo-terminalno dodelitev. Recimo, da ste ssh -p 80 [email protected] uporabili za prijavo v svoj račun na example.com, kar je seveda lutka za dokumentacijo, ki ne obstaja.
Poskusite zagnati npr. ssh -t -t -R -p 80 [email protected] in preverite, ali to odpravlja težavo. Za uspešno prijavo v sistem boste morali seveda zamenjati ime z dejanskim računom in imenom gostitelja. To prisili dodeljevanje terminala, zato ne smete videti, da psevdo-terminal ne bo dodeljen, ker stdin ni napaka terminala.
Po drugi strani pa boste morda na koncu dobili stalno vrsto sporočil o napakah. Nekateri uporabniki so pripomnili, da bi se to lahko zdelo zabavno.
Vsekakor je moteče, ne glede na to, zato uporabite Ctrl + C, da ubijete postopek.
Poskusite lahko z uporabo samo enega stikala -t ali pa povečate število. Če to ne deluje, zamenjajte vsa stikala -t s stikalom -T v ukazu, npr. ssh -T -R -p 80 [email protected] in preverite, ali to deluje.
Ta metoda v celoti onemogoči celoten postopek dodeljevanja psevdo-terminalov, zato lahko deluje v primerih, ko vsiljevanje ne. Seveda z ukazno vrstico nič od tega ne bi smelo predstavljati težav, vendar si oglejte, katera možnost deluje v vašem skriptu, da jo lahko uporabite v vseh prihodnjih skriptih, ki jih morate zagnati za dostop do omenjenega strežnika.
Ker je ukaz ssh tem dvema nasprotnima možnostma dal podobni imeni, ne pozabite, da -t prisili dodeljevanje psevdo-terminalov, medtem ko ga -T onemogoči. Te možnosti razlikujejo med velikimi in malimi črkami in so pogosto potrebne znotraj skriptov, ker ssh za delovanje potrebuje tradicionalni terminal TTY. Seveda bi v tem primeru uporabili emulator terminala za ta namen.
2. način: Uporaba sshpass
Nekateri bodo morda ugotovili, da njihovi skripti bolje delujejo z ukazom sshpass, ki privzeto ni vključen. Vedno ga lahko namestite s sudo apt-get install sshpass ali sudo yum install sshpass, če želite poskusiti ali ker ga potrebujete za svoj primer uporabe.
Če ga še ne uporabljate, ga verjetno ne potrebujete. Kljub temu lahko z istimi tehnikami presenetite sporočila o napakah, povezanih s psevdo-terminalno dodelitvijo, tudi v tovrstnem okolju.
Na primer, uporabite sshpass -p geslo ssh -T [email protected], da prisilite sistem v delovanje znotraj skripta.
3. način: odpravljanje napak pri upravljanju opravil
Občasno boste morda dobili še eno sporočilo o napaki, tudi ko boste vse to popravili. Če prejmete opozorilo, v katerem piše, da ni dostopa do tty, in vas nato opozorijo, da v vaši lupini ni nadzora nad opravili, bi morali delovati nekoliko normalno.
Do te napake pride zaradi nepravilnega delovanja oddaljenega strežnika, povezanega s csh, tcsh ali morda celo z Almquistom ali drugo lupino. Morda tega niste opazili, ker ste prejemali druga sporočila o napakah, vendar pod pogojem, da o psevdo-terminalih ne vidite nobenega drugega, bi moralo biti mogoče nadaljevati razmeroma kot običajno.
Morda v tem primeru ne želite poskusiti uporabiti Ctrl + Z, da ustavite procese, ker morda ne bo mogoče, da se znova zaženejo. Če se pri izhodu prikaže sporočilo o napaki, v katerem piše, da so ustavljena opravila, se ne boste mogli odjaviti.
Uporabite ukaze ps in kill, da zaprete vsa opravila, ki jih ne morete zapreti, ob predpostavki, da v procesu ne boste izgubili dela. Zdaj boste lahko izstopili.
Oznake Linux kako ssh