Beste antwoord
Het draaien van programmas op een terminal geeft je extra functionaliteit die er niet is als je programmas uitvoert als batchtaken Als u bijvoorbeeld een proces op de terminal uitvoert, kunt u het onderbreken door op Ctrl + C te drukken, maar als een proces niet aan een terminal is gekoppeld, kunt u het niet onderbreken met Ctrl + C, in plaats daarvan zou u waarschijnlijk om kill
of iets dergelijks uit te voeren. Terminals worden in dit antwoord in meer detail uitgelegd.
Het externe sshd
-proces gebruikt een pseudo-terminalpaar om de rol van toetsenbord en scherm op zich te nemen. Als het proces op afstand aan het lezen was van een “echte” terminal, zoals /dev/tty1
, dan zou het zijn invoer rechtstreeks van het toetsenbord krijgen. In plaats daarvan geeft het sshd
-proces uw toetsaanslagen door aan het externe proces door ze naar het hoofduiteinde van de pseudo-terminal te schrijven. Het programma dat u uitvoert, ontvangt vervolgens gegevens over de slaafzijde van de pseudo-terminal, alsof het van het toetsenbord komt. Evenzo, wanneer het proces naar de slaafzijde van de pseudo-terminal schrijft, heeft het de illusie dat het “schrijft naar een” echte “terminal die tekens op een scherm zou afdrukken. Maar in plaats daarvan leest sshd
de gegevens die op het master-uiteinde zijn geschreven, versleutelt het en stuurt het over de draad terug naar jou.
Om te zien wat er gebeurt zonder een terminal , probeer iets als ssh -T remote.host
uit te voeren. Het zal de shell starten op de externe host, maar de shell zal niet de moeite nemen om een prompt af te drukken omdat het geen terminal heeft, dus het denkt dat het in batch mode draait. U kunt ook “sudo
niet uitvoeren op de externe host omdat sudo
vereist dat het wachtwoord op een terminal wordt getypt in plaats van te lezen het uit de standaardinvoer.
Standaard zal de afstandsbediening sshd
alleen een pty toewijzen als je geen commando specificeert. Als u ssh remote.host screen
probeert, “zult u zien dat het specificeren van het commando de pty-toewijzing onderdrukt en u” opnieuw in de problemen komt. Om dit te vermijden, specificeert u de -t
optie, en dan zal de remote sshd
altijd proberen een terminal toe te wijzen.
… tenzij er geen terminal aan de lokale kant is om mee te praten, bijvoorbeeld als ssh
uit een bestand leest. In dat geval kunt u pty-toewijzing forceren pty-toewijzing door ssh -t -t
te gebruiken. Dit kan enkele onbedoelde effecten hebben, omdat het externe uiteinde reageert op elke byte die naar de standaardinvoer van ssh
“wordt geschreven alsof deze op het toetsenbord is getypt. Bijvoorbeeld: Ctrl + C op het toetsenbord produceert de ASCII-code 3, dus als de lokale ssh
toevallig een byte met de waarde 3 uit zijn invoerbestand leest, zal het dat doorgeven aan de externe host, de remote sshd
zal het naar het master-einde van het pty schrijven, en de kernel zal SIGINT naar het proces sturen om vanaf het slaaf-einde te lezen. Terminals zijn interessante wezens.