web-dev-qa-db-fra.com

Qu'est-ce qu'un shell avec ou sans login?

Il est dit que les paramètres pour que Shell ne se connecte pas au fichier .bashrc et les paramètres du serveur de connexion au fichier .profile.

Qu'entend-on vraiment par les shells login et non-login?

S'il vous plaît expliquer sans utiliser le jargon technique autant que possible.

77
DUKE

Tout simplement:

  • Si vous ouvrez un shell ou un terminal (ou en basculez sur un) et qu'il vous demande de vous connecter (nom d'utilisateur? Mot de passe?) Avant de vous donner une invite, il s'agit d'un shell de connexion.
  • Si ce n'est pas le cas (comme gnome-terminal ), et vous permet de l'utiliser tout de suite, c'est un shell sans connexion.

Si vous êtes un utilisateur normal de Ubuntu Desktop, le shell de connexion seulement est ... votre bureau (vous tapez un mot de passe pour entrer, à droite;) ? Eh bien, techniquement, c'est un shell de connexion qui démarre une interface graphique, mais cela entre dans le jargon. Et oui, il lira les paramètres dans .profile

La seule fois où vous (un utilisateur normal) verrez probablement un shell de connexion qui ressemble à un shell de connexion est si vous rencontrez un problème avec votre bureau et vous passez à un terminal virtuel avec le Ctrl+Alt+F1 raccourci.


Les autres cas généraux pour avoir un shell de connexion incluent:

  • accéder à votre ordinateur à distance via ssh (ou vous connecter localement avec ssh localhost)
  • simulation d'un shell de connexion initial avec bash -l (ou sh -l)
  • simuler un shell de connexion root initial avec Sudo -i
    • ou Sudo -u username -i pour un autre utilisateur non -root
  • authentification en tant qu'autre utilisateur non -root avec su - username (et son mot de passe )
  • en utilisant la commande Sudo login pour changer d'utilisateur
83
ish

Je ne pense pas que une 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:

Login Shell est simplement un shell à qui il a été dit d'être un shell de connexion. Cela ne signifie pas un shell qui apparaît après votre connexion, bien que, généralement, l'application qui vous enregistre indique à Shell qu'il se lance comme un shell de connexion. Il existe les moyens suivants pour indiquer à Shell qu'il doit s'agir d'un login:

  1. Exécuter Shell avec l'argument -l ou --login en supposant qu'il le connaisse (je ne connais aucun shell qui ne connaît pas -l, mais --login n'est pris en charge que par quelques shell).
  2. Exécution de Shell avec argv[0] défini sur -{some_string} (c'est-à-dire avec HYPHEN-MINUS ajouté au argv[0] habituel ou à une autre chaîne). C'est ce que ssh et su font: su exécute simplement l'exécutable avec -su sous la forme argv[0] (bonjour à tout le monde, pensant que argv[0] a quelque chose à voir avec le nom de l'exécutable en cours d'exécution), ssh exécute zsh avec -zsh lorsque l'utilisateur a défini /bin/zsh comme son shell.

Loginess of the Shell 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 tels que ssh ou login (ou certains émulateurs de terminaux comme urxvt) utilisent des shells comme des identifiants de connexion utilisant argv[0] qui commence par HYPHEN-MINUS. Certains, comme su ou Sudo (ou zsh: voir - le modificateur de précommande décrit dans la section PRECOMMAND MODIFIERS de man zshmisc) ne le font pas par défaut, mais on peut le leur dire. Certains ont la seule possibilité de dire à Shell d'être celui qui se connecte à l'aide de 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 règle générale, il est préférable de consulter d'abord la documentation du programme utilisé pour appeler Shell afin de déterminer si Shell sera celui qui se connecte, puis d'effectuer quelques tests pour déterminer si l'application lancera un shell de connexion (par exemple, en ajoutant echo à .profile).

8
ZyX