Bitwarden SSH Agent in WSL2
Ik gebruik Bitwarden om mijn SSH-sleutels te beheren. Op Windows 11 kan de Bitwarden Desktop app als SSH agent fungeren, wat erg handig is. Het probleem is dat WSL2 in een eigen lichtgewicht VM draait en geen directe toegang heeft tot de Windows SSH agent.
De oplossing is om de Windows named pipe te koppelen aan een Unix socket in WSL2 met behulp van npiperelay en socat.
Installeer npiperelay op Windows
Download npiperelay.exe van de npiperelay releases pagina.
Plaats het bestand op een locatie die toegankelijk is vanuit WSL2, bijvoorbeeld /mnt/c/Users/Kevin/.local/bin/npiperelay.exe.
Installeer socat in WSL2
sudo apt install socat
Configureer je shell
Voeg het volgende toe aan je ~/.bashrc (of ~/.zshrc) in WSL2:
export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"
ss -a | grep -q "$SSH_AUTH_SOCK"
if [ $? -ne 0 ]; then
rm -f "$SSH_AUTH_SOCK"
(setsid socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork EXEC:"/mnt/c/Users/Kevin/.local/bin/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi
Dit stelt SSH_AUTH_SOCK in op een Unix socket, controleert of socat al draait, en start het anders op om verkeer door te sturen tussen de Unix socket en de Windows named pipe die Bitwarden beschikbaar stelt.
Pas het pad naar npiperelay.exe aan naar de locatie waar je het hebt neergezet.
Schakel de SSH agent in in Bitwarden
Ga in Bitwarden Desktop naar Settings en schakel de SSH agent functie in. Deze registreert zich op de standaard Windows OpenSSH pipe (\\.\pipe\openssh-ssh-agent).
Verifiëren
Open een nieuwe WSL2 terminal en voer uit:
ssh-add -l
Je zou je sleutels uit Bitwarden moeten zien. Vanaf nu zal elke SSH-verbinding vanuit WSL2 (git, rsync, ssh, etc.) via Bitwarden authenticeren.
Problemen oplossen
Als je “agent refused operation” krijgt, moet Bitwarden waarschijnlijk toestemming geven voor het gebruik van de sleutel. Zorg ervoor dat de desktop app ontgrendeld is.
Als de socket helemaal niet werkt, controleer dan de pipe naam. Je kunt SSH-gerelateerde pipes opzoeken in PowerShell:
Get-ChildItem \\.\pipe\ | Where-Object Name -like '*ssh*'
Zorg er ook voor dat ~/.ssh/ bestaat met de juiste rechten (chmod 700 ~/.ssh).