157

On Linux (Debian Squeeze) I would like to disable SSH login using password to some users (selected group or all users except root). But I do not want to disable login using certificate for them.

edit: thanks a lot for detailed answer! For some reason this does not work on my server:

Match User !root
PasswordAuthentication no

...but can be easily replaced by

PasswordAuthentication no
Match User root
PasswordAuthentication yes
  • Maybe it's because of your indentation? – nil Jan 30 '13 at 7:19
  • 7
    It's worth mentioning that those lines under match should be at the end of the file – zidarsk8 Dec 25 '13 at 1:29
  • 1
    !root also doesn't work for me. The second approach did the trick. – natenho Jun 5 '15 at 18:25
  • I've seen cases where Match User "!root,*" did the job. – Roman Hocke Jun 5 '17 at 14:58
167

Try Match in sshd_config:

Match User user1,user2,user3,user4
    PasswordAuthentication no

Or by group:

Match Group users
    PasswordAuthentication no

Or, as mentioned in the comment, by negation:

Match User !root
    PasswordAuthentication no

Note that match is effective "until either another Match line or the end of the file." (the indentation isn't significant)

  • 4
    prefer Match user !root for this case – 84104 Jun 30 '11 at 16:41
  • 1
    Awesome, I didn't know about the Match syntax. One suggestion I would make, though, is if this is a public facing server, I wouldn't allow root login through SSH at all. Probably not a huge deal if it's Internal though.. – Safado Jun 30 '11 at 17:47
  • 4
    @SpacemanSpiff That's what a) strong passwords and b) denyhosts/fail2ban are for. – ceejayoz Jul 4 '11 at 19:56
  • 2
    @deed02392 You can consider a key to be a really, really strong password if you like. – ceejayoz Jul 5 '13 at 13:26
  • 4
    It's so much stronger it's not in the same ball-park, that was my point. Password authentication should be disabled for root too and keys only allowed for logins. – deed02392 Jul 6 '13 at 11:49
17

Match in sshd_config works well. You should use Match all to end the match block if you're using openssh 6.5p1 or above. Example:

PasswordAuthentication no
Match User root
PasswordAuthentication yes
Match all
2

There are a few ways that you can do this - first, you could concievably run a second sshd daemon on a different port with different config - its a bit of a hack, but with some chroot work it should work just fine.

Also, you could allow password authentication, but lock the passwords for all but the one user. The users with locked passwords will still be able to authenticate with public keys.

-1

you can simply go to /etc/ssh/sshd_config file and add a line To allow --> AllowUsers user1 To Deny ---> DenyUsers user2

we can allow/deny login for a particular set of hosts using the hosts.allow or hosts.deny files located in /etc folder

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.