Nejlepší odpověď
Spouštění programů na terminálu vám poskytuje další funkce, které tam nejsou, když spouštíte programy jako dávkové úlohy Například pokud spustíte proces na terminálu, můžete jej přerušit stisknutím Ctrl + C, ale pokud proces není spojen s žádným terminálem, nemůžete jej přerušit pomocí Ctrl + C, místo toho byste pravděpodobně měli spustit kill
nebo něco podobného. Terminály jsou v této odpovědi vysvětleny podrobněji.
Vzdálený proces sshd
používá dvojici pseudoterminálů, aby převzal roli klávesnice a obrazovky. Pokud vzdálený proces načítal z „opravdového“ terminálu, například /dev/tty1
, získal by svůj vstup přímo z klávesnice. Místo toho sshd
proces předá vaše stisknutí kláves vzdálenému procesu tak, že je zapíše na hlavní konec pseudoterminálu. Program, který právě spouštíte, pak přijímá data na podřízeném konci pseudoterminálu, jako by pocházel z klávesnice. Podobně, když proces zapisuje na podřízený konec pseudoterminálu, má iluzi, že zápis do „pravého“ terminálu, který by tiskl znaky na obrazovku. Místo toho však sshd
načte data zapsaná na hlavní straně, zašifruje je a pošle je po drátu zpět k vám.
Chcete-li zjistit, co se stane bez terminálu , zkuste spustit něco jako ssh -T remote.host
. Spustí shell na vzdáleném hostiteli, ale shell nebude obtěžovat tisk výzvy, protože nemá terminál, takže si myslí, že běží v dávkovém režimu. Také nebudete moci spustit sudo
na vzdáleném hostiteli, protože sudo
vyžaduje, aby bylo místo terminálu zadáno heslo na terminálu je to ze standardního vstupu.
Ve výchozím nastavení vzdálený sshd
přidělí částku pouze v případě, že neurčíte příkaz. Pokud zkusíte ssh remote.host screen
, uvidíte, že zadání příkazu potlačí přidělení pty a budete znovu v potížích. Chcete-li tomu zabránit, zadejte možnost -t
a vzdálený sshd
se vždy pokusí přidělit terminál.
… pokud na místním konci není žádný terminál, se kterým byste mohli mluvit, například pokud ssh
čte ze souboru. V takovém případě můžete vynutit přidělení peněz pomocí ssh -t -t
. To může mít některé nechtěné efekty, protože vzdálený konec bude reagovat na každý bajt zapsaný na standardní vstup ssh
, jako by byl zadán na klávesnici. Například Ctrl + C na klávesnice produkuje kód ASCII 3, takže pokud by místní ssh
náhodou přečetl bajt s hodnotou 3 ze svého vstupního souboru, předá to vzdálenému hostiteli, remote sshd
jej zapíše na hlavní konec pty a jádro odešle SIGINT do procesu čtení ze slave konce. Terminály jsou zajímavá stvoření.