O segredo é que existe um agente ssh rodando em segundo plano e o Ubuntu salva configurações para esse processo em algum lugar. Então, para fazer as coisas acontecerem, você precisa de a) iniciar o ssh-agent em segundo plano eb) salvar o PID desse processo em algum lugar, para que você possa fornecer o valor para o PId para todos os shells subsequentes.
Quando o ssh-agent é iniciado, ele emitirá seu PID e algumas outras informações que você deseja fornecer posteriormente ao gerar novos shells. Algo como o seguinte no seu ~/.bashrc
pode funcionar:
setf="$HOME/.ssh_agent_settings" # filename for storing PID etc.
[ -r $setf ] && . $setf > /dev/null 2>1 # source PID etc. if file exists
kill -0 $SSH_AGENT_PID > /dev/null 2>&1 # kill -0 will fail if process doesn't exist
[ "$?" -eq 0 ] && exit # kill returns 0 on success
ssh-agent > $setf # process doesn't exist, so we create one
. $setf > /dev/null 2>&1 # source PID of the newly created process
Isso iniciará o ssh-agent na inicialização do shell, caso ainda não esteja em execução, ou apenas as variáveis PID e AUTH_SOCK do agente ssh de ~/.ssh_agent_settings
.