como exigir publickey e otp, ou senha e otp quando logar com o ssh?

1

Estou tentando fazer com que o ssh funcione de uma maneira em que a senha auth possa ser ignorada com uma chave e, além disso, cada login seria seguido com o totp usando a libpam do google em minha nova instalação do debian 9.

Até agora eu pude fazer a primeira parte funcionar, onde se eu fornecer uma chave, o servidor me pede o otp, mas do jeito que está, eu tive que comentar tanto @include common-auth quanto @include common-password para suprimir o aviso de senha em /etc/pam.d/sshd .

Parece óbvio, então, que se eu fizer AuthenticationMethods publickey,keyboard-interactive:pam password,keyboard-interactive:pam no meu sshd_config e tento fazer o login sem uma chave, não importa qual senha eu forneço, já que as partes que verificam a senha estão comentadas.

A maneira lógica de resolver isso como pareceria para um novato como eu, seria que eu poderia definir diferentes métodos ou classes pam e, em seguida, de alguma forma referenciar aqueles em meu sshd_config, mas eu não consigo encontrar qualquer informação sobre tal uma operação.

É possível realizar essa combinação em particular?

editar 1:

Pensando ainda mais nisso, ele realmente não faz tanto sentido quanto eu pensava inicialmente. Se eu comentar tanto @include common-auth como @include common-password , posso obter publickey,keyboard-interactive:pam para não solicitar senha. Se eu definir agora AuthenticationMethods password para um usuário específico, esse usuário não poderá efetuar login, pois todas as senhas serão rejeitadas, mesmo que sejam realmente válidas. Então, logicamente, então parece que o método sshd password auth também usa o /etc/pam.d/sshd configs. se eu não comentar os includes, keyboard-interactive:pam pede senha e código de verificação, mas o método password auth ainda falha para qualquer usuário que tenha o otp inicializado (e falharia para todos, exceto se eu der ao google libpam a opção nullok). Parece que password é apenas uma versão ruim de keyboard-interactive:pam que pode apenas solicitar uma entrada e, portanto, sempre falha se houver mais de uma entrada obrigatória.

Se eu escrever meu próprio módulo pam.d, existe alguma maneira de fazer o ssh usá-lo em vez de /etc/pam.d/sshd ?

edite 2:

Estou começando a achar que não posso fazer (password && otp) || (publickey && otp) , porque a chave pública está marcada em um lugar diferente do resto, e a menos que eu possa definir qual pam config usar com AuthenticationMethods , ou posso de alguma forma enviar parâmetros / argumentos para o módulo pam, sabendo quando verificar ambos e quando apenas verificar otp parece impossível

    
por Noino 10.11.2018 / 22:13

1 resposta

0

O parâmetro que você está procurando no sshd_config é AuthenticationMethods . Eu escrevi uma postagem no blog sobre como combinar autenticação de chave SSH com OTP há um tempo atrás.

No entanto, esta postagem de blog usa o OTP com um módulo pam contra o sistema de autenticação privacyIDEA. Mas você deve poder trocar isso facilmente com o google pam.

    
por 11.11.2018 / 22:36