SSH Agent: Could not open a connection to your authentication agent - with Fish Shell
When you create a new SSH key for a remote connection, you will need to add that key to the ssh-agent.
For example, the GitHub documentation tells you to start the ssh-agent in the background:
$ eval "$(ssh-agent -s)" > Agent pid 59566
And then add the key:
$ ssh-add ~/.ssh/id_rsa
What happens when you use fish shell instead of the standard bash shell?
$ eval "$(ssh-agent -s)" > fish: $(...) is not supported. In fish, please use '(ssh-agent)'.
Ok, fish, I now remember that your syntax is not bash-compatible ...
$ eval "ssh-agent -s" > SSH_AUTH_SOCK=/tmp/ssh-qSWfVCBEZQcc/agent.4858; export SSH_AUTH_SOCK; SSH_AGENT_PID=4859; export SSH_AGENT_PID; echo Agent pid 4859;
Great. Can I now add my key to ssh-agent?
$ ssh-add ~/.ssh/id_rsa > Could not open a connection to your authentication agent.
Fish doesn't use the export command, so when you run the
eval command it doesn't set environment variables for ssh-agent.
Instead you have to use the
set -x command.
$ set -x SSH_AUTH_SOCK /tmp/ssh-qSWfVCBEZQcc/agent.4858 $ set -x SSH_AGENT_PID 4859
Use the csh-style option
-c (see Arch Wiki):
$ eval (ssh-agent -c) > Agent pid 4859
Now you can run
I like fish but sometimes it's frustrating that you have to remember that it is different from bash.
The problem is that every time you reboot, your ssh-agent-session is lost and you have to add the key again.
As a workaround you can install a small utility called fish_ssh_agent which will start the ssh-agent when running fish shell.