init.zsh 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #
  2. # sets up ssh-agent
  3. #
  4. # don't do anything unless we can actually use ssh-agent
  5. if (( ! ${+commands[ssh-agent]} )); then
  6. return 1
  7. fi
  8. # use a sane temp dir; creating 1k ssh-* files in /tmp is crazy
  9. if [[ ${TMPDIR} ]]; then
  10. local ssh_env=${TMPDIR}/ssh-agent.env
  11. local ssh_sock=${TMPDIR}/ssh-agent.sock
  12. else
  13. # create a sane tmp dir at /tmp/username
  14. mkdir -p /tmp/${USER}
  15. local ssh_env=/tmp/${USER}/ssh-agent.env
  16. local ssh_sock=/tmp/${USER}/ssh-agent.sock
  17. fi
  18. # start ssh-agent if not already running
  19. if [[ ! -S ${SSH_AUTH_SOCK} ]]; then
  20. # read environment if possible
  21. source ${ssh_env} 2> /dev/null
  22. if ! ps -U ${LOGNAME} -o pid,ucomm | grep -q -- "${SSH_AGENT_PID:--1} ssh-agent"; then
  23. eval "$(ssh-agent | sed '/^echo /d' | tee ${ssh_env})"
  24. fi
  25. fi
  26. # create socket
  27. if [[ -S ${SSH_AUTH_SOCKET} && ${SSH_AUTH_SOCKET} != ${ssh_sock} ]]; then
  28. ln -sf ${SSH_AUTH_SOCKET} ${ssh_sock}
  29. export SSH_AUTH_SOCK=${ssh_sock}
  30. fi
  31. # load ids
  32. if ssh-add -l 2>&1 | grep -q 'no identities'; then
  33. if (( ${#zssh_ids} > 0 )); then
  34. ssh-add "${HOME}/.ssh/${^zssh_ids[@]}" 2> /dev/null
  35. else
  36. ssh-add 2> /dev/null
  37. fi
  38. fi
  39. unset ssh_{sock,env}