How to check if ssh-agent is already running in bash?
No, really, how to check if ssh-agent
is already running in bash?
Answers so far don't appear to answer the original question...
Here's what works for me:
if ps -p $SSH_AGENT_PID > /dev/null
then
echo "ssh-agent is already running"
# Do something knowing the pid exists, i.e. the process with $PID is running
else
eval `ssh-agent -s`
fi
This was taken from here
Running SSH Agent when starting Git Bash on Windows
2013: In a git bash
session, you can add a script to ~/.profile
or ~/.bashrc
(with ~
being usually set to %USERPROFILE%
), in order for said session to launch automatically the ssh-agent
.
If the file doesn't exist, just create it.
This is what GitHub describes in "Working with SSH key passphrases".
The "Auto-launching ssh-agent on Git for Windows" section of that article has a robust script that checks if the agent is running or not.
Below is just a snippet, see the GitHub article for the full solution.
# This is just a snippet. See the article above.
if ! agent_is_running; then
agent_start
ssh-add
elif ! agent_has_keys; then
ssh-add
fi
Other Resources:
"Getting ssh-agent to work with git run from windows command shell" has a similar script, but I'd refer to the GitHub article above primarily, which is more robust and up to date.
hardsetting
adds in the comments (2018):
If you want to enter the passphrase the first time you need it, and not when opening a shell, the cleanest way to me is:
- removing the
ssh-add
from the.bash_profile
, and- adding "
AddKeysToAgent yes
" to your.ssh/config
file (see "How to makessh-agent
automatically add the key on demand?").This way you don't even have to remember running
ssh-add
.
And Tao adds in the comments (2022):
It's worth noting why this script makes particular sense in Windows, vs (for example) the more standard linuxey script noted by @JigneshGohel in another answer:
By not relying on the
SSH_AGENT_PID
at all, this script works across different msys & cygwin environments.
An agent can be started in msys2, and still used ingit bash
, as theSSH_AUTH_SOCK
path can be reached in either environment.
The PID from one environment cannot be queried in the other, so a PID-based approach keeps resetting/creating newssh-agent
processes on each switch.
How to run ssh-add on windows?
One could install Git for Windows and subsequently run ssh-add
:
Step 3: Add your key to the ssh-agent
To configure the ssh-agent program to use your SSH key:
If you have GitHub for Windows installed, you can use it to clone repositories and not deal with SSH keys. It also comes with the Git Bash tool, which is the preferred way of running git commands on Windows.
Ensure ssh-agent is enabled:
If you are using Git Bash, turn on ssh-agent:
# start the ssh-agent in the background
ssh-agent -s
# Agent pid 59566If you are using another terminal prompt, such as msysgit, turn on ssh-agent:
# start the ssh-agent in the background
eval $(ssh-agent -s)
# Agent pid 59566Add your SSH key to the ssh-agent:
ssh-add ~/.ssh/id_rsa
ssh-agent in bash script causes many dead processes
Your script probably shouldn't start ssh-agent
; it should make use of an ssh-agent
that's already running. That way, the user is responsible for starting a single agent that can be used by multiple invocations of the script.
The simplest thing you can do, though, is simply add either
kill $SSH_AGENT_PID
or
ssh-agent -k
to the end of your script to kill the agent that was just started. One of the things the eval
command does is sets the value of SSH_AGENT_PID
to the process ID of the just-started agent.
(The former is useful if you have, for whatever reason, multiple concurrent agents, so that you kill the correct agent.)
Related Topics
How Bash Handles the Jobs When Logout
Linux Script That Monitors File Changes Within Folders (Like Autospec Does!)
Why Is Pr_Debug of the Linux Kernel Not Giving Any Output
Using Named Pipes with Bash - Problem with Data Loss
Unzip a Bunch of Zips into Their Own Directories
Detecting a Change of Ip Address in Linux
Microsecond Accurate (Or Better) Process Timing in Linux
Numa Aware Cache Aligned Memory Allocation
Linux Command Output as a Parameter of Another Command
Count the Number of Times a Word Appears in a File
How to Use Awk to Convert All the Lower-Case Letters into Upper-Case