Quittez à la fois root et user avec une seule commande

9

Je sais "ne pas utiliser sudo su -", etc. Mais soyons honnêtes, nous le faisons presque tous.

Voici donc le problème. Nous ne pouvons pas activer les connexions root, nous devons donc nous connecter en tant qu'utilisateur, puis passer à root.
Voici l'arbre de processus:

    1  7897  7826  7826 ?           -1 S     1000   0:00 sshd: josh@pts/0
 7897  7898  7898  7898 pts/0     8182 Ss    1000   0:00  \_ -bash
 7898  7990  7990  7898 pts/0     8182 S        0   0:00      \_ sudo su -
 7990  7991  7990  7898 pts/0     8182 S        0   0:00          \_ su -
 7991  7992  7992  7898 pts/0     8182 S        0   0:00              \_  -su
 7992  8182  8182  7898 pts/0     8182 R+       0   0:00                  \_ ps axjf

Je voudrais quitter root, puis mon utilisateur avec une seule commande. Y a-t-il un moyen de faire cela?

BTW exit && exit ne fonctionne pas car il quitte le shell et ne traite pas le reste de la commande

josh@ubuntu:~$ sudo su -
root@ubuntu:~# exit && exit
logout
josh@ubuntu:~$
Joshua Zitting
la source
5
"Presque nous tous le faisons .." J'en doute. Je gère plusieurs machines et j'ai tous les mots de passe et je n'utilise jamais "sudo su" sur les systèmes basés sur Debian. Et je m'attends à ce que la plupart d'entre nous ne l'utilisent pas.
Rinzwind
1
Ne l'utilisez pas sudo su, c'est inutile et lance juste un processus supplémentaire. Utilisez sudo -i, si vous le devez, à la place.
terdon
J'utilise sudo -ipour obtenir un shell racine. Quant à ssh, vous pouvez configurer ssh pour autoriser les connexions root, personnellement j'utilise les options "sans mot de passe" pour root et les clés ssh er kerberos. Cela garde le compte root verrouillé sur les mots de passe.
Panther
Je ne comprends pas très bien ce qui ne fonctionne pas. Les premières exitsorties su, la seconde se déconnecte. N'est-ce pas ce que tu voulais faire?
Pilot6
1
@ Pilot6 avez-vous testé ce code ?? Je viens de le faire et ça ne marche pas .. c'est JUSTE ce que je veux faire .. Mais ça ne marche pas ..
Joshua Zitting

Réponses:

9

Techniquement, personne n'a répondu à votre question. J'apprécie qu'ils pensent que leur voie est meilleure (probablement), mais voici une autre approche (au cas où vous auriez du su -temps et que vous auriez le même problème);

  1. [Connectez-vous à un système]
  2. $ sudo su -;exit
  3. # echo "do things"
  4. # exit

Lorsque vous quittez root, l'utilisateur d'origine se déconnecte également car il poursuit sa dernière commande.

À votre santé!

Alexander E. Smith
la source
14

Fais juste

exec sudo -i

Maintenant, le shell racine remplace celui par défaut, et lorsque vous quittez, vous quittez "les deux" (incorrectement libellé, car le premier shell cesse d'exister avec le exec).

Regardez:

[romano:~] % ssh pern
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-28-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

[romano@pern:~] % exec sudo -i
[sudo] password for romano: 
root@pern:~# whoami
root
root@pern:~# pstree -a -s -l -p -u $$
init,1
  └─sshd,1140 -D
      └─sshd,17450 
          └─sshd,17570,romano  
              └─sudo,17571,root -i
                  └─bash,17665
                      └─pstree,17678 -a -s -l -p -u 17665
root@pern:~# exit
logout
Connection to pern.XXX.XXX.XXX closed.
[romano:~] % 

Je l'utilise beaucoup pour avoir un sshterminal -ed: utilisez exec ssh whateveret quand vous quittez, le terminal se ferme.

Rmano
la source
2
BIEN FAIT!!! Je vous remercie! Je n'ai plus à taper exit deux fois !!
Joshua Zitting
Astucieusement fait! excellent
Anwar
1

lorsque vous devenez root, tapez simplement ::

sudo -s && exit

lorsque vous quitterez root, votre shell se fermera automatiquement. vous pouvez exporter cette commande pour la rendre permanente.

echo "alias mysudo='sudo -s; exit'" >> ~/.bashrc && source ~/.bashrc
javesh bhardwaj
la source