How to switch between users on one terminal?

I’d like to log in as a different user without logging out of the current one (on the same terminal). How do I do that?

Asked By: tshepang

||

Generally you use sudo to launch a new shell as the user you want; the -u flag lets you specify the username you want:

[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody

There are more circuitous ways if you don’t have sudo access, like ssh username@localhost, but I think sudo is probably simplest if it’s installed and you have permission to use it

Answered By: Michael Mrozek

How about using the su command?

$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout

If you want to log in as root, there’s no need to specify username:

$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout

Generally, you can use sudo to launch a new shell as the user you want; the -u flag lets you specify the username you want:

$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2

There are more circuitous ways if you don’t have sudo access, like ssh username@localhost, but sudo is probably simplest, provided that it’s installed and you have permission to use it.

Answered By: Pratt
$ whoami 

This command prints the current user. To change users, we will have to use this command (followed by the user’s password):

$ su secondUser
Password:

After entering the correct password, you will be logged in as the specified user (which you can check by rerunning whoami.

Answered By: Ashish Saini

To switch the terminal session to a different user, where that user can’t exit back into the original user, use exec:

$|# exec su – [username]

This will technically login the new user in a new term process, and close out the current one. That way when the user attempts exit or Ctrl-D, the terminal will close as though that user was the one who instantiated it, i.e., the user can’t exit back into the original user’s term. Kind of pointless, considering they can still just start a new terminal session and automatically be in the original user term login, but there it is.

EDIT:
For what it’s worth, you can use linux vlock command in your ~/.bashrc to lock terminal sessions by default, requiring the password of the term session user to unlock. This would somewhat prevent the aforementioned term restart under the original user context, given the term isn’t instantiated using the non-default ~/.bashrc of the user, as configured.

Answered By: SYANiDE
~$ sudo login

Then it will prompt you for the sudo password (the currently logged in user’s password).

Also: make sure that the current user is in the sudoers file!

Answered By: Tshepo

If you’re running Ubuntu, and if the user you want to login as doesn’t have a password set:

sudo su - username

Enter your own password and you should be set. Of course, this requires that your user has rights to gain root privileges with sudo.

Answered By: Sundae

Yet another route is to launch a new shell as a different (non-root) user to run commands as that user.

ubuntu@aws-ip:~$ sudo -u mongodb bash          #<-- or zsh, etc... 
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork

An example of this is the mongodb user. When deploying a sharded MongoDB cluster, all the necessary processes must run as mongodb and it’s not necessary (or entirely convenient) to daemonize the processes using init scripts for dozens of nodes.

Answered By: 4Z4T4R

sudo -iu <your_username> for me do the trick

Answered By: andilabs

Let us get this right: You are logged in as UserA and want to “login” as UserB to run some commands, but would like to come back to UserA when done. For the sake of simplicity, I assume that you want to run ls -l /tmp as UserB. If you do not want to leave the current shell of UserA but rather run a command as UserB and still remain logged in as UserA, you should do this:

su - UserB -c "ls -l /tmp"   <-- Just an example

This assumes you know the password for UserB. However, if you do not know UserB’s password, you need to know the root password. Then:

sudo su - UserB -c "ls -l /tmp"   <-- UserB's pw not needed here

If you would rather temporarily login as UserB to run lots of commands, then just do:

sudo su - UserB

This will give you a new shell for UserB (check that by typing id). When done, you can do ctrl-d and return to your login.

Answered By: Hopping Bunny

If you need to run just a single command, you can use sudo:
sudo -u username command

Answered By: Maksim Luzik
Categories: Answers Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.