summaryrefslogtreecommitdiff
path: root/zsh/functions/op-ssh-add
diff options
context:
space:
mode:
Diffstat (limited to 'zsh/functions/op-ssh-add')
-rw-r--r--zsh/functions/op-ssh-add28
1 files changed, 28 insertions, 0 deletions
diff --git a/zsh/functions/op-ssh-add b/zsh/functions/op-ssh-add
new file mode 100644
index 0000000..d64efd9
--- /dev/null
+++ b/zsh/functions/op-ssh-add
@@ -0,0 +1,28 @@
+# -*- mode: sh -*-
+
+if [[ ${@[1]} =~ '-[DdKLlTXx]' ]]; then
+ $(which -p ssh-add) $@
+ return $?
+fi
+
+local prv pub
+for prv (${@[-1]} ~/.ssh/id_{ecdsa,ed25519}{,_sk}); do
+ if [[ -f ${prv}.pub ]]; then
+ pub=${prv}.pub
+ break
+ fi
+done
+
+if [[ -z ${pub} ]]; then
+ $(which -p ssh-add) $@
+ return $?
+fi
+
+zmodload zsh/zpty
+zpty ssh $(which -p ssh-add) $@
+zpty -w ssh $(op get item \
+ $(cut -d' ' -f3 ${pub}) \
+ --fields password \
+ --session $(op signin --raw))
+zpty -r ssh
+zpty -d ssh