Use WSL ssh-agent by default
This commit is contained in:
parent
ebe8927884
commit
b4526f94cc
1 changed files with 33 additions and 37 deletions
|
@ -1,18 +1,20 @@
|
|||
#!/bin/sh
|
||||
usage () {
|
||||
usage() {
|
||||
echo "usage: $0 [-w] [-h]"
|
||||
echo " -w use the WSL ssh-agent instead of OpenSSH for Windows"
|
||||
echo " -w use OpenSSH for Windows instead of WSL ssh-agent"
|
||||
echo " -h show help and exit"
|
||||
}
|
||||
|
||||
require() {
|
||||
if ! command -v "$@" >/dev/null 2>&1; then
|
||||
>&2 echo "ERROR: required command not found: $1"
|
||||
exit 1
|
||||
fi
|
||||
error() {
|
||||
printf "ERROR: %s\n" "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
start_with_wsl_agent() {
|
||||
require() {
|
||||
command -v "$@" >/dev/null 2>&1 || error "'$1' not found"
|
||||
}
|
||||
|
||||
start_wsl_agent() {
|
||||
if [ "$#" -gt 0 ]; then
|
||||
SHLVL=0 exec ssh-agent "$SHELL" -c "$@"
|
||||
else
|
||||
|
@ -20,15 +22,18 @@ start_with_wsl_agent() {
|
|||
fi
|
||||
}
|
||||
|
||||
start_with_windows_agent() {
|
||||
start_windows_agent() {
|
||||
require socat
|
||||
require npiperelay
|
||||
|
||||
# Forward SSH Agent requests from withitn WSL to OpenSSH for Windows, based on:
|
||||
# https://stuartleeks.com/posts/wsl-ssh-key-forward-to-windows/
|
||||
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
|
||||
export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"
|
||||
[ -S "$SSH_AUTH_SOCK" ] && rm "$SSH_AUTH_SOCK"
|
||||
socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"npiperelay -ei -s //./pipe/openssh-ssh-agent",nofork &
|
||||
socat \
|
||||
UNIX-LISTEN:$SSH_AUTH_SOCK,fork \
|
||||
EXEC:"npiperelay -ei -s //./pipe/openssh-ssh-agent",nofork \
|
||||
&
|
||||
|
||||
if [ "$#" -gt 0 ]; then
|
||||
SHLVL=0 exec "$SHELL" -c "$@"
|
||||
|
@ -37,32 +42,23 @@ start_with_windows_agent() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Use OpenSSH for Windows by default.
|
||||
WSL_SSH_AGENT=false
|
||||
main() {
|
||||
WSL_SSH_AGENT=yes
|
||||
while getopts ":wh" arg; do
|
||||
case "$arg" in
|
||||
w) WSL_SSH_AGENT=no;;
|
||||
h) usage; exit 0;;
|
||||
?) usage >&2; error "unknown option -$OPTARG";;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
while getopts ":wh" arg; do
|
||||
case "$arg" in
|
||||
w)
|
||||
WSL_SSH_AGENT=true
|
||||
;;
|
||||
if [ "$WSL_SSH_AGENT" = "yes" ]; then
|
||||
start_wsl_agent "$@"
|
||||
else
|
||||
start_windows_agent "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
|
||||
?)
|
||||
>&2 echo "ERROR: unknown option -$OPTARG"
|
||||
>&2 usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "$WSL_SSH_AGENT" = true ]; then
|
||||
start_with_wsl_agent "$@"
|
||||
else
|
||||
start_with_windows_agent "$@"
|
||||
fi
|
||||
main "$@"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue