Migliore risposta
Lesecuzione di programmi su un terminale ti dà funzionalità extra che non sono presenti quando esegui programmi come lavori batch Ad esempio, se esegui un processo sul terminale, puoi interromperlo premendo Ctrl + C, ma se un processo non è associato a nessun terminale, non puoi interromperlo con Ctrl + C, invece dovresti probabilmente per eseguire kill
o qualcosa del genere. I terminali sono spiegati più dettagliatamente in questa risposta.
Il processo sshd
remoto utilizza una coppia pseudo-terminale per assumere il ruolo di tastiera e schermo. Se il processo remoto stava leggendo da un terminale “vero”, come /dev/tty1
, riceverà linput direttamente dalla tastiera. Invece il processo sshd
passa le tue battiture al processo remoto scrivendole allestremità principale dello pseudo-terminale. Il programma in esecuzione riceve quindi i dati sullestremità slave dello pseudoterminale, come se provenissero dalla tastiera. Allo stesso modo, quando il processo scrive sullestremità slave dello pseudoterminale, ha lillusione che “sta scrivendo su un terminale” vero “che stamperà caratteri su uno schermo. Ma invece sshd
legge i dati scritti sul lato master, li crittografa e te li rimanda via cavo.
Per vedere cosa succede senza un terminale , prova a eseguire qualcosa come ssh -T remote.host
. Avvierà la shell sullhost remoto ma la shell non si preoccuperà di stampare un prompt perché non ha un terminale, quindi pensa di essere in esecuzione in modalità batch. Inoltre non potrai eseguire sudo
sullhost remoto perché sudo
richiede che la password sia digitata su un terminale invece di leggere dallo standard input.
Per impostazione predefinita, il sshd
remoto allocherà un pty solo quando non specifichi un comando. Se provi ssh remote.host screen
, vedrai che la specifica del comando sopprime lallocazione pty e ti troverai di nuovo nei guai. Per evitare ciò, specifica lopzione -t
, quindi sshd
remoto proverà sempre ad allocare un terminale.
… a meno che non ci sia alcun terminale allestremità locale con cui parlare, come se ssh
stia leggendo da un file. In tal caso, puoi forzare lallocazione pty utilizzando ssh -t -t
. Questo può avere alcuni effetti indesiderati, perché lestremità remota reagirà a ogni byte scritto nello standard input di ssh
“come se fosse stato digitato sulla tastiera. Ad esempio, Ctrl + C in la tastiera produce il codice ASCII 3, quindi se il ssh
locale dovesse leggere un byte con il valore 3 dal suo file di input, lo passerà allhost remoto, il remote sshd
lo scriverà allestremità master del pty e il kernel invierà SIGINT al processo che legge dallestremità slave. I terminali sono creature interessanti.