저는 몇 년전 부터 비밀번호 관리자로 bitwarden을 사용하고 있습니다.
정확히는 vaultwarden을 사용하고 있습니다.
그러다가 언젠가부터 bitwarden에 ssh agent 기능이 들어왔고, vaultwarden도 관련 기능이 구현되었습니다.
기본적인 설정방법은 https://bitwarden.com/help/ssh-agent/ 공식홈페이지에 아주 잘 나와있고, 작동도 잘되지만, 특정 부분에서 이슈가 있어 그 부분을 공유하고자 합니다.
기본적인 사용 방법
기본적으로 ssh 사용법과 동일합니다.
타겟 머신의 접속하고자 하는 계정의 ~/.ssh/authorized_keys 에 공개키를 등록하고 접속 PC에서 -i 옵션으로 개인키 경로를 지정하면 됩니다.
bitwarden ssh agent를 사용하면 bitwarden에 개인키를 저장해두고, ssh -i 옵션에 공개키로 그 개인키를 찾아가게 만들 수 있습니다.
공식홈페이지에 나와있는 가이드를 잘 따라 했다면, $SSH_AUTH_SOCK env 값으로 bitwarden의 ssh-agent socket를 가지고 있을 것입니다.
Issue
터미널을 켜서 ssh 명령어를 사용하는 경우에는 크게 문제가 없지만..
예를들어 git client나 ssh를 사용하는 것들을 macos Dock에 등록해놓고 사용한다면


위 이미지처럼 기본 소켓이 들어가있게 됩니다.

정상적으로 bitwarden의 소켓을 바라보면 정상적으로 bitwarden이 관리하는 key 목록을 볼 수 있습니다.
해결방법
해결 방법은 간단합니다.
터미널에서는 되는 이유는 shell profile에 등록했기 때문이므로 똑같이 Dock이 켜질 때 환경변수를 가져가도록 만들면 됩니다.
스크립트 작성
경로: ~/.config/Bitwarden-SSH-Setup
#!/bin/sh
SOCK_PATH="/Users/{사용자명}/Library/Containers/com.bitwarden.desktop/Data/.bitwarden-ssh-agent.sock"
for i in $(seq 1 30); do
if [ -S "$SOCK_PATH" ]; then
launchctl setenv SSH_AUTH_SOCK "$SOCK_PATH"
killall Dock
killall Spotlight
exit 0
fi
sleep 1
done
launchctl setenv SSH_AUTH_SOCK "$SOCK_PATH"
chmod +x ~/.config/Bitwarden-SSH-Setup 실행권한을 추가해줍니다.
plist 생성
경로: ~/Library/LaunchAgents/environment.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.environment</string>
<key>ProgramArguments</key>
<array>
// 예시 <string>/Users/userA/.config/Bitwarden-SSH-Setup</string>
<string>{위 스크립트 경로}</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

plist까지 만들고 나면, 자동으로 위 메세지가 뜨게 됩니다.
설정 > 일반 > 로그인 항목 및 확장 프로그램에 앱 백그라운드 활동에도 등록되있는 걸 확인할 수 있습니다.

재부팅하면, Dock 에서 실행한 프로그램도 의도대로 값이 들어온것을 볼 수 있습니다.
이제 ssh key를 모두 bitwarden에 저장해놓고 편하게 접속 할 수 있게 되었습니다.