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