[Yubikey] yubikey를 사용하여 ssh 로그인
Yubikey를 사용하다보니, 보안을 위해서 사용하고 있는 서버의 로그인 방법에 대해 생각해보다, Smart Card 또는 ed25519-sk를 사용하면 할 수 있다고 생각하여 적용해보고 작성하는 글이다.
먼저 Yubikey에는 PIV라는 기능이 있다.
PIV를 사용하게 되면, Smart Card와 같은 기능을 수행하기에, PKCS#11 이라는 방법으로 로그인을 할 수있다.
다른 방법은 ed25519-sk를 사용하는 법이다.
ED25519-SK (SSH key)
ssh-keygen -t ed25519-sk -O resident -C "my-yubikey"위 명령어로, ssh key를 만든다.
ed25519-sk는 스마트 키를 사용하는 방법이고, -O는 yubikey안에 키를 저장하여 다른 PC에서도 사용할 수 있는 인자값이다.
위 명령어를 사용하면, 중간에 yubikey 를 터치하는 부분이 나오는데, yubikey가 반짝일때 금속 단자부분을 터치하면 넘어갈 수 있다.
id_ed25519_sk_rk
id_ed25519_sk_rk.pub키 생성이 완료되면, 위와 같은 파일 2개가 생기는데, 이 두 파일중 *.pub으로 끝나는 파일의 내용을 아래의 파일 안에 적고 저장한다.
/home/{username}/.ssh/authorized_keys안에 *.pub파일의 내용을 붙혀 넣으면 된다.
이후의 로그인은 Public Key로 인증을 하기에,
#/etc/ssh/sshd_config
PubkeyAuthentication yes해당 부분의 주석을 해제하여, Public Key를 사용할 수 있도록 변경한뒤, ssh서비스를 재 시작 해서 public key 인증이 가능하도록 한다.
ssh {username}@{ipaddr} -i id_ed25519_sk_rk해당 명령어로 접속을 하게 된다면, yubikey를 터치 하라는 창이 나오게 된다

이때 Yubikey가 1hz 간격 으로 반짝이면서, 금속 단자를 터치 하게 될 경우, 로그인이 바로 성공적으로 이루어 짐 을 확인 할 수 있다.

위와 같이, User presense confirmed로 나오면서 바로 로그인이 가능하게 된다.
macOS의 경우는

다음과 같이 로그인이 성공하는 것을 볼 수있다.
여기까지가 ed25519-sk를 사용하는 방법이였고, 하단부터는 Smart Card를 사용하는 방법이다.
Smart Card는 PKCS#11을 사용하는데, Windows와 macOS양쪽 다 Open-SC를 사용하게 된다.
먼저 Yubikey Manager에서 smart card 저장소(9a)에 인증서를 하나 발급한다.
Home -> Applications -> PIV -> Certificate -> Generate를 통해, Certificate를 생성한다.
ssh-keygen -D /opt/homebrew/lib/opensc-pkcs11.so -e
dobob@Doyeons-Mac-mini .ssh % ssh-keygen -D /opt/homebrew/lib/opensc-pkcs11.so -e
ecdsa-sha2-nistp256 AAAAA_BLA_BLA_KEY= PIV AUTH pubkey위와 같은 식의 key가 나오게 된다. Public Key가 나오게 된다면,
다음 위치에 해당 ecdsa-sha2로 시작하는 문자열을 넣고 저장한다.
/home/{username}/.ssh/authorized_keys
위와 같이 세팅 후,
/etc/ssh/sshd_config
내에 있는
UsePAM 을 Yes로 바꾼후,
sudo systemctl restart ssh
로 Service를 restart시켜준다.
여기까지 완료하였으면, Server Side는 완료가 되었다. 아직 접속하는 client쪽의 문제만 남아있는 상황이다.
기본적으로 SSH client는 pkcs#11을 지원하기 않기에, OpenSC를 설치 해줘야 SmartCard기능을 불러와 로그인 할 수 있다.
macOS라면 brew install opensc, Windows라면 winget install OpenSC.OpenSC 로 설치가 가능하다.
해당 호스트에 접속하기 위해, OpenSC를 사용할 필요가 있다면 .ssh/config내에 다음 구문을 추가하여, 해당 서버에 접속 시 smart card lib를 불러오도록 한다.
Host *
User {username}
PKCS11Provider /opt/homebrew/lib/opensc-pkcs11.so
윈도우의 경우는
Host *
User {username}
PKCS11Provider "C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll"
IdentityAgent=none
로 설정을 하게 되면, OpenSC가 호출되어 SmartCard의 PIN을 넣게 되고, 로그인이 완료되는 식으로 동작하게 된다.