Você deve conseguir fazer isso com uma diretiva Match
.
Antes de começar, verifique se você tem pelo menos uma conta com acesso baseado em chave de trabalho ao servidor (ou acesso físico).
Em seguida, edite o arquivo /etc/ssh/sshd_config
do servidor, adicionando seu bloco de correspondência no final, por exemplo,
Match User john Address 192.168.1.0/24
PasswordAuthentication yes
Observe que isso expressa duas condições, User john
e Address 192.168.1.0/24
, ambas das quais devem ser satisfeitas para que PasswordAuthentication yes
seja aplicado. A 0/24
é notação CIDR para qualquer endereço na sub-rede 192.168.1.x.
Agora você pode desativar a autenticação de senha para outras combinações de endereço de usuário no corpo principal da configuração, encontrando a seção que começa:
# Change to no to disable tunnelled clear text passwords
e alterando o padrão
#PasswordAuthentication yes
para
PasswordAuthentication no
Por fim, reinicie o serviço - para sistemas init baseados em systemd
, você pode fazer isso usando
sudo systemctl restart ssh.service
Você pode testar se usuários não correspondentes não podem mais se autenticar usando senhas, forçando o cliente a experimentar, por exemplo,
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
que deve falhar com uma mensagem como
Permission denied (publickey).
considerando que john
deve receber uma senha:
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
[email protected]'s password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-116-generic x86_64)
Se você quiser que a autenticação por senha seja o mecanismo preferido para john
quando estiver na rede local, talvez seja necessário especificar isso na configuração do cliente correspondente, por exemplo, ~/.ssh/ssh_config