Meilleure réponse
Lexécution de programmes sur un terminal vous offre des fonctionnalités supplémentaires qui ne sont pas disponibles lorsque vous exécutez des programmes en tant que jobs batch Par exemple, si vous exécutez un processus sur le terminal, vous pouvez l’interrompre en appuyant sur Ctrl + C, mais si un processus n’est associé à aucun terminal, vous ne pouvez pas l’interrompre avec Ctrl + C, vous auriez probablement pour exécuter kill
ou quelque chose comme ça. Les terminaux sont expliqués plus en détail dans cette réponse.
Le processus distant sshd
utilise une paire de pseudo-terminaux afin dassumer le rôle dun clavier et dun écran. Si le processus distant lisait à partir dun « vrai » terminal, tel que /dev/tty1
, alors il obtiendrait son entrée directement depuis le clavier. Au lieu de cela, le processus sshd
transmet vos frappes au processus distant en les écrivant à lextrémité maître du pseudo-terminal. Le programme que vous exécutez reçoit alors des données sur lextrémité esclave du pseudo-terminal, comme sil provenait du clavier. De même, lorsque le processus écrit à lextrémité esclave du pseudo-terminal, il a lillusion quil « s écrit sur un » vrai « terminal qui imprimerait des caractères sur un écran. Mais à la place, sshd
lit les données écrites à lextrémité maître, les crypte et vous les renvoie sur le fil.
Pour voir ce qui se passe sans terminal , essayez dexécuter quelque chose comme ssh -T remote.host
. Il démarrera le shell sur lhôte distant, mais le shell ne prendra pas la peine dimprimer une invite car il na pas de terminal et pense donc quil fonctionne en mode batch. Vous ne pourrez pas non plus exécuter sudo
sur l’hôte distant car sudo
exige que le mot de passe soit saisi sur un terminal au lieu de le lire à partir de lentrée standard.
Par défaut, le sshd
distant allouera un pty uniquement lorsque vous ne spécifiez pas de commande. Si vous essayez ssh remote.host screen
, vous verrez que la spécification de la commande supprime lallocation pty et vous aurez à nouveau des problèmes. Pour éviter cela, spécifiez loption -t
, et la télécommande sshd
essaiera toujours dallouer un terminal.
… sauf sil ny a pas de terminal sur lextrémité locale à qui parler, par exemple si ssh
lit un fichier. Dans ce cas, vous pouvez forcer lattribution de pty en utilisant ssh -t -t
. Cela peut avoir des effets indésirables, car lextrémité distante réagira à chaque octet écrit dans lentrée standard de ssh
« comme si elle avait été tapée au clavier. Par exemple, Ctrl + C à le clavier produit le code ASCII 3, donc si le ssh
local doit arriver à lire un octet avec la valeur 3 de son fichier dentrée, il le transmettra à lhôte distant, le remote sshd
lécrira à lextrémité maître du pty, et le noyau enverra SIGINT au processus de lecture depuis lextrémité esclave. Les terminaux sont des créatures intéressantes.