From 62f2f49b168ae9393d16b492364d0c76b2fe18bc Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Sat, 17 Apr 2021 13:58:49 -0500 Subject: feat: moving from wsl-pagent to wsl2-pagent --- ssh/gpg-agent-relay.sh | 123 ----------------------------------------------- ssh/ssh.sh | 10 ++++ ssh/wsl2-ssh-pageant.exe | Bin 0 -> 3613696 bytes 3 files changed, 10 insertions(+), 123 deletions(-) delete mode 100755 ssh/gpg-agent-relay.sh create mode 100644 ssh/ssh.sh create mode 100755 ssh/wsl2-ssh-pageant.exe (limited to 'ssh') diff --git a/ssh/gpg-agent-relay.sh b/ssh/gpg-agent-relay.sh deleted file mode 100755 index 5a42ba9..0000000 --- a/ssh/gpg-agent-relay.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env bash -# Inspired by https://blog.nimamoh.net/yubi-key-gpg-wsl2/ - -# Guide: -# Install GPG on windows & Unix -# Add "enable-putty-support" to gpg-agent.conf -# Download wsl-ssh-pageant and npiperelay and place the executables in "C:\Users\[USER]\AppData\Roaming\" under wsl-ssh-pageant & npiperelay -# https://github.com/benpye/wsl-ssh-pageant/releases/tag/20190513.14 -# https://github.com/NZSmartie/npiperelay/releases/tag/v0.1 -# Adjust relay() below if you alter those paths -# Place this script in WSL at ~/.local/bin/gpg-agent-relay -# Start it on login by calling it from your .bashrc: "$HOME/.local/bin/gpg-agent-relay start" - -GNUPGHOME="$HOME/.gnupg" -PIDFILE="$GNUPGHOME/gpg-agent-relay.pid" - -die() { - # shellcheck disable=SC2059 - printf "$1\n" >&2 - exit 1 -} - -main() { - checkdeps socat start-stop-daemon lsof timeout - case $1 in - start) - if ! start-stop-daemon --pidfile "$PIDFILE" --background --notify-await --notify-timeout 5 --make-pidfile --exec "$0" --start -- foreground; then - # shellcheck disable=SC2016 - die 'Failed to start. Run `gpg-agent-relay foreground` to see output.' - fi - ;; - stop) - start-stop-daemon --pidfile "$PIDFILE" --remove-pidfile --stop ;; - status) - start-stop-daemon --pidfile "$PIDFILE" --status - local result=$? - case $result in - 0) printf "gpg-agent-relay is running\n" ;; - 1 | 3) printf "gpg-agent-relay is not running\n" ;; - 4) printf "unable to determine status\n" ;; - esac - return $result - ;; - foreground) - relay ;; - *) - die "Usage:\n gpg-agent-relay start\n gpg-agent-relay stop\n gpg-agent-relay status\n gpg-agent-relay foreground" ;; - esac -} - -relay() { - set -e - local winhome - local wslwinhome - winhome=$(cmd.exe /c "/dev/null || true) - wslwinhome="$(wslpath -u "$winhome")" - local npiperelay="$wslwinhome/AppData/Roaming/npiperelay/npiperelay.exe" - local wslsshpageant="$wslwinhome/AppData/Roaming/wsl-ssh-pageant/wsl-ssh-pageant-amd64-gui.exe" - local gpgconnectagent="/mnt/c/Program Files (x86)/GnuPG/bin/gpg-connect-agent.exe" - local gpgagentsocket="$GNUPGHOME/S.gpg-agent" - local sshagentsocket="$GNUPGHOME/S.gpg-agent.ssh" - # backslash escaping in socat EXEC doesn't seem to work very well, use forward slashes instead - # windows/npiperelay handle that just fine - local wingpgagentpath="${winhome//\\/\/}/AppData/Roaming/gnupg/S.gpg-agent" - - killsocket "$gpgagentsocket" - killsocket "$sshagentsocket" - - "$gpgconnectagent" /bye - - "$wslsshpageant" --winssh ssh-pageant 2>/dev/null & - # shellcheck disable=SC2034 - WSPPID=$! - - socat UNIX-LISTEN:"$gpgagentsocket,unlink-close,fork,umask=177" EXEC:"$npiperelay -ep -ei -s -a '$wingpgagentpath'",nofork & - GNUPID=$! - # shellcheck disable=SC2064 - trap "kill -TERM $GNUPID" EXIT - - socat UNIX-LISTEN:"$sshagentsocket,unlink-close,fork,umask=177" EXEC:"$npiperelay /\/\./\pipe/\ssh-pageant" & - SSHPID=$! - - set +e - # shellcheck disable=SC2064 - trap "kill -TERM $GNUPID; kill -TERM $SSHPID" EXIT - - systemd-notify --ready 2>/dev/null - wait $GNUPID $SSHPID - trap - EXIT -} - -killsocket() { - local socketpath=$1 - if [[ -e $socketpath ]]; then - local socketpid - if socketpid=$(lsof +E -taU -- "$socketpath"); then - timeout .5s tail --pid=$socketpid -f /dev/null & - local timeoutpid=$! - kill "$socketpid" - if ! wait $timeoutpid; then - die "Timed out waiting for pid $socketpid listening at $socketpath" - fi - else - rm "$socketpath" - fi - fi -} - -checkdeps() { - local deps=("$@") - local dep - local out - local ret=0 - for dep in "${deps[@]}"; do - if ! out=$(type "$dep" 2>&1); then - printf -- "Dependency %s not found:\n%s\n" "$dep" "$out" - ret=1 - fi - done - return $ret -} - -main "$@" \ No newline at end of file diff --git a/ssh/ssh.sh b/ssh/ssh.sh new file mode 100644 index 0000000..9abfbdb --- /dev/null +++ b/ssh/ssh.sh @@ -0,0 +1,10 @@ +if [ -z "$SSH_AUTH_SOCK" ]; then + # Check for a currently running instance of the agent + RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`" + if [ "$RUNNING_AGENT" = "0" ]; then + # Launch a new instance of the agent + ssh-agent -s &> $HOME/.ssh/ssh-agent + fi + eval `cat $HOME/.ssh/ssh-agent` > /dev/null + ssh-add &> /dev/null +fi diff --git a/ssh/wsl2-ssh-pageant.exe b/ssh/wsl2-ssh-pageant.exe new file mode 100755 index 0000000..7852088 Binary files /dev/null and b/ssh/wsl2-ssh-pageant.exe differ -- cgit v1.2.3-70-g09d2