I have set up automatic (password less) ssh login to some servers using ssh-copy-id. ssh-agent works only from the terminal where it was run. How do I get ssh-add to work in all my terminals?
Naturally, I would not prefer SSH key without a passphrase.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
If you’re logging into a graphical session, arrange to start ssh-agent during your session startup. Some distributions already do that for you. If yours doesn’t, arrange to run ssh-agent from your session startup script or from your window manager. How you do that depends on your desktop environment and your window manager. For example, if you start your window manager manually, simply replace the call to my_favorite_wm by ssh-agent my_favorite_wm.
Do not start ssh-agent from .bashrc or .zshrc, since these files are executed by each new interactive shell. The place to start ssh-agent is in a session startup file such as .profile or .xsession.
If you want to use the same SSH agent on all processes no matter where you logged in from, you can make it always use the same socket name, instead of using a randomly-named socket. For example, you might put this in your ~/.profile:
export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock ssh-add -l 2>/dev/null >/dev/null if [ $? -ge 2 ]; then ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null fi
Method 2
You probably want a program such as Keychain, which was designed for this exact purpose. From the man page:
DESCRIPTION keychain is a manager for ssh-agent, typically run from ~/.bash_profile. It allows your shells and cron jobs to share a single ssh-agent process.
Method 3
Apply it to your desktop environment or window manager. When I’ve done this manually in the past with a custom ~/.Xclients, I just used this as the last line:
ssh-agent mywindowmanger
There might be some DE’s that have their own setup options for this, although it appears to me that (e.g.) KDE does not. Currently, it seems that mine was run via code from /etc/X11/xinit/xinitrc-common (presumably something done by fedora), since it is active for all users regardless of DE/WM and the parent process command is $HOME/.Xclients, but that file does not reference ssh-agent (whereas /etc/X11/xinit/xinitrc-common does).
If you don’t have a ~/.Xclients, you could create one with just that one line, but you will need to know the command that starts your DE/WM.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0