그래서 나는이 매끄러운 작은 yubikey를 얻었고 ssh 세션을 인증 할 때 추가 보안 계층을 추가하고 싶습니다. 서버 측에서 이미 비밀번호 인증을 비활성화했으며 로그인 할 때 ssh 키 사용 만 허용합니다.
문제는 yubikey 인증을 위해 sshd 및 PAM을 구성한 후에도 sshd에는 여전히 ssh 키만 필요하다는 것입니다.
ssh 키 와 yubikey 가 모두 필요 합니까?
(ubuntu 14.04 - trusty)
/etc/pam.d/common-auth
:
auth required pam_yubico.so mode=client try_first_pass id=<id> key=<secret>
auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config
/etc/ssh/sshd_config
:
...
PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes
답변
좋아, 나는 그것을 유지했고 나는 합리적인 해결책을 생각해 냈다고 생각한다. 내가 이전에 놓친 주요한 것은 sshd ‘s AuthenticationMethods publickey,password
입니다. 이로 인해 공개 키 와 암호 ( “암호”)가 요구됩니다 PAM->auth-yubi
. 추가 변경도 필요했습니다 (아래 참조).
(우분투 14.04-신뢰할 수있는) :
/etc/pam.d/yubi-auth
auth required pam_yubico.so mode=client try_first_pass id=<id> key=<key>
참고 : 여기에서 액세스 ID와 비밀 키를 얻을 수 있습니다
/etc/pam.d/sshd
# Standard Un*x authentication.
#@include common-auth
# Yubikey auth
@include yubi-auth
/ etc / ssh / sshd_config
UsePAM yes
ChallengeResponseAuthentication no
AuthenticationMethods publickey,password
PasswordAuthentication yes
service ssh restart
확인
공개 키가 없는 원격 호스트의 SSH
root@0a6442bcb21c:/# ssh ben@192.168.1.20
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
ECDSA key fingerprint is ea:2a:e3:98:35:72:66:b1:e0:65:6b:3f:60:8a:af:ab.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (ECDSA) to the list of known hosts.
Permission denied (publickey).
원격 호스트에서 SSH 와 공개 키
$ ssh ben@192.168.1.20
Authenticated with partial success.
ben@192.168.1.20's password:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-33-generic x86_64)
개량
인증시 원격 ssh 서버에서 “password :”대신 “Yubikey Auth :”가 표시되는 것이 좋습니다.
ssh 서버가 yubico의 인증 확인 시스템에 접속할 수없는 경우 어떻게됩니까? 이상적인 솔루션은 완전히 독립적입니다.
의견과 제안에 감사드립니다.
답변
Yubikey로 2FA를 설정하는 것은 까다로울 수 있지만 ( U2F 용 openssh 패치 가 있다고 생각 ) 가장 쉬운 방법은 Yubico 공식 웹 사이트 에 설명 된 방법 일 것입니다 .
기본적으로 Yubikey에 개인 키를 저장하고 PIN으로 보호하는 방법입니다. 그것은 당신이 묘사 한 2FA가 아니지만 (그러나 당신 이 가지고 있고 알고있는 것입니다 ) 보안을 훨씬 향상시킵니다 (실패 시도 후 유비 키 잠금).
TL : DR;
OPENSC_LIBS=`locate opensc-pkcs11.so`
yubico-piv-tool -s 9a -a generate -o public.pem
yubico-piv-tool -a verify-pin -P 123456 -a selfsign-certificate -s 9a \
-S "/CN=SSH key/" -i public.pem -o cert.pem
yubico-piv-tool -a import-certificate -s 9a -i cert.pem
ssh-keygen -D $OPENSC_LIBS/opensc-pkcs11.so -e
ssh -I $OPENSC_LIBS/opensc-pkcs11.so user@remote.example.com