SSH双因素authentication(2FA)与yubikey

所以我有这个小巧的yubikey,我想在validationssh会话时添加一个额外的安全层。 在服务器端,我已经禁用了密码authentication,并且只允许在login时使用ssh密钥。

问题是,在为yubikeyvalidationconfigurationsshd和PAM后,sshd仍然只需要一个ssh密钥,我从来没有要求从yubikey提供响应。

我如何要求和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 

好的,我坚持下去,我想我已经想出了一个合理的解决scheme。 我以前丢失的主要东西是sshd的AuthenticationMethods publickey,password 。 这强制要求公钥密码 – “密码”现在由PAM->auth-yubi来处理。 还需要进行其他更改,如下所示:

(Ubuntu的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

validation

来自远程主机的SSH, 没有公钥

 root@0a6442bcb21c:/# ssh [email protected] 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 [email protected] Authenticated with partial success. [email protected]'s password: Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-33-generic x86_64) 

起色

validation身份时,从远程ssh服务器上看到“Yubikey Auth:”而不是“password:”会很好。

当ssh服务器无法联系yubico的身份validation系统时会发生什么? 一个理想的解决scheme将是完全独立的。

意见和build议表示赞赏。

用Yubikey设置2FA可能会很棘手(以为U2F有openssh 补丁 ),但最简单的方法可能是在Yubico官方网站上描述的方法。

这基本上就是将您的私钥存储在Yubikey上并通过PIN进行保护的方式。 这不完全是你所描述的2FA(但它是什么,你什么和你知道什么 ),但它增加了更多的安全性(Yubikey锁后一些不成功的尝试)。

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 [email protected]