Je ne pense pas qu'une réponse correcte puisse être donnée sans utiliser de "jargon technique". Puisque cette question est la première à apparaître sur Google pour la requête "qu'est-ce qu'un shell de connexion", je fournirai ci-dessous une réponse plus correcte :
Un shell de connexion est simplement un shell auquel on a dit d'être un shell de connexion. Cela ne signifie pas un shell qui apparaît après la connexion, bien que généralement l'application qui vous connecte dise au shell qu'il lance d'être un shell de connexion. Il existe les façons suivantes de dire au shell qu'il doit être un shell de connexion :
- Exécuter le shell avec l'argument
-l
ou --login
en supposant qu'il le reconnaisse (je ne connais aucun shell qui ne reconnaisse pas -l
, mais --login
n'est supporté que par quelques shells).
- Exécuter le shell avec
argv[0]
défini sur -{quelque_chaine}
(c'est-à-dire avec un SIGNE MOINS ajouté au début du argv[0]
habituel ou à une autre chaîne). C'est ce que font ssh et su : su exécute simplement le programme avec -su
comme argv[0]
(bonjour à tous ceux qui pensent que argv[0]
a quelque chose à voir avec le nom de l'exécutable actuellement en cours d'exécution), ssh exécute zsh avec -zsh
lorsque l'utilisateur a défini /bin/zsh
comme son shell.
Le fait d'être un shell de connexion n'a absolument rien à voir avec le fait que quelqu'un vous demande un mot de passe ou effectue une autre procédure d'authentification. Certains programmes comme ssh ou login (ou certains émulateurs de terminal comme urxvt) exécutent des shells en tant que shells de connexion en utilisant argv[0]
qui commence par un SIGNE MOINS. Certains comme su ou sudo (ou zsh : voir le modificateur de précommande -
décrit dans la section MODIFICATEURS DE PRÉCOMMANDE de man zshmisc
) ne le font pas par défaut, mais peuvent être indiqués. Certains ont pour seule option de dire au shell d'être un shell de connexion en utilisant son argument (c'est-à-dire bash -l
) : ssh avec un argument de commande (qui indique explicitement à ssh quoi exécuter à l'extrémité distante).
Il est généralement préférable de consulter d'abord la documentation du programme utilisé pour invoquer le shell pour déterminer si le shell sera un shell de connexion, puis de faire quelques tests pour déterminer si l'application lancera un shell de connexion (par exemple, en ajoutant un echo
à .profile
).