ssh-agent
Sometimes it’s useful to connect to many different lab machines at the same time. Having to type in your password or passphrase for each connection would be a pain. ssh-agent
is a program that stores your passphrase and provides it automatically for you when logging in.
Here’s how I use ssh-agent
when I first connect to a CS machine (details explained below):
$ ssh-agent bash
$ ssh-add
Enter passphrase for .....:
The above sequence runs ssh-agent
as the parent of the bash shell, so anything done in that bash shell uses the agent. I then add my ssh key to the agent, which stores it for future use.
As a result of running ssh-agent
and ssh-add
, I can now ssh into any lab machine without having to type my passphrase!
For example, if I am on bacon and run the above commands, then ssh to carrot, then oil:
BACON[~]$ ssh-agent bash
BACON[~]$ ssh-add
Enter passphrase for /home/knerr/.ssh/id_rsa:
BACON[~]$ ssh carrot
Welcome to: carrot running 18.04
CARROT[~]$ exit
BACON[~]$ ssh oil
Welcome to: oil running 18.04
OIL[~]$ exit
Notice that I didn’t have to type in my passphrase when sshing to carrot or oil!
I usually do the above sequence (run ssh-agent
and ssh-add
) in the first terminal I create when I log in. After that I can use parallel-ssh
or other programs to connect to multiple lab machines (without typing my passphrase for each login!). Here’s a simple example:
$ parallel-ssh -h /usr/swat/db/hosts.mainlab -i uptime
[1] 09:46:04 [SUCCESS] cheese
09:46:04 up 14 days, 12:23, 13 users, load average: 0.02, 0.05, 1.00
[2] 09:46:05 [SUCCESS] lime
09:46:05 up 14 days, 12:23, 0 users, load average: 1.00, 1.00, 1.00
[3] 09:46:05 [SUCCESS] mushroom
09:46:05 up 14 days, 12:23, 3 users, load average: 2.00, 1.08, 0.04
[4] 09:46:05 [SUCCESS] caper
09:46:05 up 14 days, 12:23, 0 users, load average: 1.00, 1.06, 1.00
[5] 09:46:05 [SUCCESS] bacon
09:46:05 up 14 days, 12:23, 0 users, load average: 1.00, 2.00, 2.00
[6] 09:46:05 [SUCCESS] basil
09:46:05 up 14 days, 12:23, 0 users, load average: 1.04, 1.01, 1.00
....
....
In the example above I use parallel-ssh
to connect to all machines listed in /usr/swat/db/hosts.mainlab
(all machines in the main 240 lab), and I interactively (-i
) run the uptime
command (shows load, users, etc) on each machine.
This step isn’t needed, but can be very useful if opening up multiple terminals and windows (each subsequent window makes use of the ssh-agent with the stored ssh key included), or running long jobs (you can start your job, detach from the tmux session, log out, then re-attach at a later time).
$ ssh-agent bash
$ ssh-add
Enter passphrase for .....:
$ tmux
See also: