Przeglądaj źródła

using_oh_my_zsh: add ssh-agent initialisation for linux shells

cinaeco 13 lat temu
rodzic
commit
1669bc349e
1 zmienionych plików z 43 dodań i 0 usunięć
  1. 43 0
      zsh/zshrc.ohmyzsh

+ 43 - 0
zsh/zshrc.ohmyzsh

@@ -74,6 +74,49 @@ alias gs='git status'
 alias gd='git diff'
 alias gds='git diff --staged'
 
+#############
+# SSH AGENT #
+#############
+
+# Don't do for OSX, as it has it's own handling of ssh-agent
+if [ `uname` != Darwin ]; then
+
+  # Check to see if SSH Agent is already running
+  agent_pid="$(ps -ef | grep "ssh-agent" | grep -v "grep" | awk '{print($2)}')"
+
+  # If the agent is not running (pid is zero length string)
+  if [[ -z "$agent_pid" ]]; then
+    # Start up SSH Agent
+
+    # this seems to be the proper method as opposed to `exec ssh-agent bash`
+    eval "$(ssh-agent)"
+
+    # if you have a passphrase on your key file you may or may
+    # not want to add it when logging in, so comment this out
+    # if asking for the passphrase annoys you
+    #ssh-add
+
+  # If the agent is running (pid is non zero)
+  else
+    # Connect to the currently running ssh-agent
+
+    # this doesn't work because for some reason the ppid is 1 both when
+    # starting from ~/.profile and when executing as `ssh-agent bash`
+    #agent_ppid="$(ps -ef | grep "ssh-agent" | grep -v "grep" | awk '{print($3)}')"
+    agent_ppid="$(($agent_pid - 1))"
+
+    # and the actual auth socket file name is simply numerically one less than
+    # the actual process id, regardless of what `ps -ef` reports as the ppid
+    agent_sock="$(find /tmp -path "*ssh*" -type s -iname "agent.$agent_ppid")"
+
+    echo "Agent pid $agent_pid"
+    export SSH_AGENT_PID="$agent_pid"
+
+    echo "Agent sock $agent_sock"
+    export SSH_AUTH_SOCK="$agent_sock"
+  fi
+fi
+
 ## include settings specific to this machine
 if [[ -r ~/.zshlocal ]]; then
     source ~/.zshlocal