فهرست منبع

feat(ssh_agent): Load keys not loaded before

Signed-off-by: Jeremy MAURO <jeremy.mauro@gmail.com>
Jeremy MAURO 2 سال پیش
والد
کامیت
2658b12069
1فایلهای تغییر یافته به همراه23 افزوده شده و 2 حذف شده
  1. 23 2
      rc.d/02_ssh_agent.sh

+ 23 - 2
rc.d/02_ssh_agent.sh

@@ -17,10 +17,29 @@ function start_agent {
     add_key
 }
 
+function list_not_loaded_keys {
+  KEYS=$(list_keys)
+  KEYS_LOADED=$(ssh-add -l | awk '{ print $3}')
+  KEYS_NOT_LOADED=""
+  for key in ${KEYS}
+  do
+    if ! grep -q "${key}" <<< ${KEYS_LOADED}; then
+      KEYS_NOT_LOADED="${KEYS_NOT_LOADED} ${key}"
+    fi
+  done
+
+  echo "${KEYS_NOT_LOADED}"
+}
+
 function add_key {
   /usr/bin/ssh-add -t 86400 $(list_keys)
 }
 
+function update_keys {
+  KEYS=$(list_not_loaded_keys)
+  [[ -n ${KEYS} ]] && /usr/bin/ssh-add -t 86400 ${KEYS}
+}
+
 function list_keys {
   PRIV_KEYS=""
   for file in ${HOME}/.ssh/id_*
@@ -43,6 +62,8 @@ if [ -f "${SSH_ENV}" ]; then
       start_agent
     elif [ $agent_run_state -eq 1 ]; then
       add_key
+    elif [ $agent_run_state -eq 0 ]; then
+      update_keys
     fi
 else
     start_agent;
@@ -50,7 +71,7 @@ fi
 
 # Create our own hardlink to the socket (with random name)
 MYSOCK=/tmp/ssh_agent.${RANDOM}.sock
-ln --no-target-directory ${SSH_AUTH_SOCK} ${MYSOCK}
+ln --force --no-target-directory ${SSH_AUTH_SOCK} ${MYSOCK}
 export SSH_AUTH_SOCK=${MYSOCK}
 
 end_agent()
@@ -64,4 +85,4 @@ end_agent()
     rm ${SSH_AUTH_SOCK}
 }
 
-trap end_agent EXIT
+trap end_agent EXIT SIGKILL SIGTERM