É definitivamente possível configurar um sshd
para exigir que ou um par de chaves válido ou use HOTP (nova senha única (OTP) em cada solicitação) OATH com base em autenticação - estou fazendo isso. Tenho quase certeza de que o Google Authenticator é apenas outra implementação da OATH.
Meu artigo completo pode ser lido no link , mas o resultado é:
Supondo que seu sshd
já esteja configurado para permitir autenticação baseada em chave pública (a maioria é), adicione essas duas linhas a sshd_config
:
PasswordAuthentication no
ChallengeResponseAuthentication yes
Instale pam_auth
(sendo esta a maneira orientada pelo CentOS, para x86_64):
yum install pam_oath
ln -s /usr/lib64/security/pam_oath.so /lib64/security/
Faça o arquivo de autenticação /etc/users.oath
, modo 600
, proprietário root:root
e preencha-o com linhas como:
#type username pin start seed
HOTP fred - 123a567890123b567890123c567890123d567890
Edite /etc/pam.d/sshd
e adicione a linha
auth required pam_oath.so usersfile=/etc/users.oath window=5 digits=8
Ignore o digits=8
se estiver satisfeito com HOTP OATH de 6 dígitos. Eu acredito que um método similar pode ser usado para TOTP OATH (new OTP a cada n segundos), mas eu estou usando tokens OATH de hardware ao invés de software, e eles são yubikeys, que fazem apenas HOTP OATH .
O único problema é que, quando você executa ssh sem apresentar uma chave válida, ele solicita o código OATH antes da senha. Eu não poderia fazer o trabalho ao contrário, mas decidi que não me importava tanto assim; os prompts deixam bem claro qual token está sendo solicitado.