Graças a dois outros posts de SE ( um em SO , um em SF ), a resposta está em usar avançado control
sintaxe . O
auth required pam_unix.so try_first_pass nullok
# and sometime later
auth optional pam_ssh.so use_first_pass
deve, portanto, tornar-se
auth [success=1 new_authtok_reqd=1 ignore=ignore default=ignore] pam_unix.so try_first_pass nullok
auth required pam_ssh.so use_first_pass
Agora é imperativo que a linha pam_ssh
preceda exatamente o pam_unix
one, pois success=N
significa ignorar N
após o (s) módulo (s).
Além disso, não se esqueça da linha session pam_ssh.so
enquanto você está nessa!
Na minha primeira tentativa, usei
auth [success=1 default=ignore] pam_ssh.so try_first_pass
auth required pam_unix.so use_first_pass nullok
em vez disso, mas esse método bloqueia todos os usuários sem chaves SSH! Acontece que default=ignore
não é suficiente, auth_err=ignore
tem que ser adicionado, já que aparentemente não é considerado parte de default
. Além disso, essa tentativa significa que haverá um prompt de "senha" ou "senha SSH", dependendo se o usuário tiver uma chave SSH!
Observe que no Arch Linux, a linha pam_unix
usada por login
está na include
chain
login -> system-local-login -> system-login -> system-auth
e que system-login
tem outros required
antes incluindo system-auth
, então você não pode simplesmente colocar auth [success=1 default=ignore] pam_ssh.so try_first_pass
antes de login
auth include system-local-login
- você pulará o required
errado e, graças ao pam_unix.so use_first_pass
(em vez de try_first_pass
), você ainda pode fazer login com sua senha de login! Por outro lado, modificando system-auth
, você também está permitindo que outros serviços como sshd
usem sua chave SSH como opção de autenticação para a senha de login. Se você realmente quer apenas que seu login
use isso, você tem que praticamente quebrar a corrente include
e copiar manualmente todos os auth
s para login
.