From 72973b0fc01f0adb7b4dadddd7e85496898e6fb5 Mon Sep 17 00:00:00 2001 From: GrĂ©goire DuchĂȘne Date: Sun, 6 Sep 2020 10:31:27 +0100 Subject: zsh: Add op-ssh-add function op-ssh-add is a small wrapper around ssh-add that retrieves the SSH private key password from 1Password before passing it to ssh-add. --- zsh/functions/_op-ssh-add | 3 +++ zsh/functions/op-ssh-add | 28 ++++++++++++++++++++++++++++ zsh/rc | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 zsh/functions/_op-ssh-add create mode 100644 zsh/functions/op-ssh-add (limited to 'zsh') diff --git a/zsh/functions/_op-ssh-add b/zsh/functions/_op-ssh-add new file mode 100644 index 0000000..2c2183e --- /dev/null +++ b/zsh/functions/_op-ssh-add @@ -0,0 +1,3 @@ +#compdef op-ssh-add=ssh-add + +_ssh $@ 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 diff --git a/zsh/rc b/zsh/rc index 93d9996..a464425 100644 --- a/zsh/rc +++ b/zsh/rc @@ -10,7 +10,7 @@ done } -autoload -Uz compinit zmv +autoload -Uz compinit op-ssh-add zmv [[ ! -d ${XDG_CACHE_HOME}/zsh ]] && mkdir -p ${XDG_CACHE_HOME}/zsh zstyle ':completion:*' cache-path ${XDG_CACHE_HOME}/zsh/cache -- cgit v1.2.3-70-g09d2