Bästa svaret
Att köra program på en terminal ger dig extra funktionalitet som inte finns där när du kör program som batchjobb Om du till exempel kör en process på terminalen kan du avbryta den genom att trycka på Ctrl + C, men om en process inte är associerad med någon terminal kan du inte avbryta den med Ctrl + C, istället skulle du förmodligen ha att köra kill
eller något liknande. Terminaler förklaras mer detaljerat i detta svar.
Fjärrkontrollen sshd
använder ett pseudo-terminalpar för att ta rollen som tangentbord och skärm. Om fjärrprocessen läste från en ”sann” terminal, som /dev/tty1
, skulle den få sin inmatning direkt från tangentbordet. Istället skickar sshd
-processen dina tangenttryckningar till fjärrprocessen genom att skriva dem till huvudänden på pseudoterminalen. Programmet du kör tar sedan emot data om slavänden på pseudoterminalen, som om den skulle komma från tangentbordet. På samma sätt, när processen skriver till slavänden på pseudoterminalen, har den en illusion att den ”skriver till en” sann ”terminal som skulle skriva ut tecken på en skärm. Men istället läser sshd
data skrivna på masteränden, krypterar den och skickar den över kabeln tillbaka till dig.
För att se vad som händer utan en terminal , försök att köra något som ssh -T remote.host
. Det kommer att starta skalet på fjärrvärden men skalet bryr sig inte om att skriva ut en uppmaning eftersom den inte har någon terminal så den tror att den körs i batch-läge. Du kommer inte heller att kunna köra sudo
på fjärrvärden eftersom sudo
kräver att lösenordet skrivs på en terminal istället för att läsa det från standardinmatning.
Som standard tilldelar fjärrkontrollen sshd
endast ett antal när du inte anger ett kommando. Om du försöker ssh remote.host screen
så kommer du att se att specificering av kommandot undertrycker pty-tilldelningen och du kommer att vara i trubbel igen. För att undvika detta, ange alternativet -t
och sedan försöker fjärrkontrollen sshd
alltid att tilldela en terminal.
… om det inte finns någon terminal i den lokala änden att prata med, till exempel om ssh
läser från en fil. I så fall kan du tvinga pty-allokering genom att använda ssh -t -t
. Detta kan ha några oavsiktliga effekter, eftersom fjärränden reagerar på varje byte som skrivs till ssh
”s standardingång som om den hade skrivits på tangentbordet. Till exempel Ctrl + C vid tangentbordet producerar ASCII-koden 3, så om den lokala ssh
skulle råka läsa en byte med värdet 3 från dess inmatningsfil, skickas den ner till fjärrvärden, fjärrkontroll sshd
skriver det till huvudänden på pty, och kärnan skickar SIGINT till processavläsningen från slavänden. Terminaler är intressanta varelser.