Je ne pense pas que la réponse correcte puisse être donnée sans "jargon technique". Étant donné que cette question est la première à apparaître dans Google pour la requête "Qu'est-ce qu'un shell de connexion", je propose une réponse plus correcte ci-dessous:
Le shell de connexion est simplement un shell auquel on a demandé d’être un shell de connexion. Cela signifie que pas signifie shell qui apparaît après que vous vous connectiez, bien que généralement l'application qui vous connecte indique au shell qu'il se lance comme un shell de connexion. Il existe les moyens suivants d’indiquer à shell qu’il devrait s’agir d’un identifiant de connexion:
- Exécution du shell avec l'argument
-l
ou --login
en supposant qu'il le sache (je ne connais aucun shell qui ne connaisse pas -l
, mais --login
n'est supporté que par quelques shells).
- Exécution du shell avec
argv[0]
défini sur -{some_string}
(c'est-à-dire que HYPHEN-MINUS a été ajouté à argv[0]
habituel ou à une autre chaîne). C'est ce que font ssh et su: su exécute simplement l'exécutable avec -su
comme argv[0]
(bonjour à tout le monde pensant que argv[0]
a quelque chose à voir avec le nom de l'exécutable), ssh exécute zsh avec -zsh
/bin/zsh
comme sa coquille.
La logique du shell n’a absolument rien à voir avec quiconque vous demande un mot de passe ou exécute une autre procédure d’authentification. Certains programmes comme ssh ou login (ou certains émulateurs de terminaux comme urxvt) exécutent des shells en tant que login en utilisant argv[0]
qui commence par un HYPHEN-MINUS. Certains comme su ou sudo (ou zsh: voir le modificateur -
precommand décrit dans la section MODCATEURS DE PRECOMMAND dans man zshmisc
) ne le font pas par défaut, mais on peut le leur dire. Certains ont la seule option pour dire à shell d'être le login en utilisant son argument (c'est-à-dire bash -l
): ssh avec un argument de commande (qui indique explicitement à ssh ce qu'il doit exécuter à l'extrémité distante).
En général, il est préférable de consulter au préalable la documentation du programme utilisé pour appeler le shell afin de déterminer si le shell sera le login et d’effectuer des tests pour déterminer si l’application lancera un shell de connexion (par exemple en ajoutant echo
à .profile
).