Ssh – How to display user@hostname in SSHD password prompt

promptssh

When I SSH to a server, the prompt sometimes displays my user and the hostname of the server:

xavier@local:~$ ssh server1
xavier@server1's password: 

Sometimes all I get is Password:

xavier@local:~$ ssh server2
Password: 

Which is less convenient when tunneling (difficult to know if I have to enter the password for the second server or if I need to repeat the first one because I made a mistake for instance), and also when using different usernames (did I forget to set the correct one in .ssh/config?).

Typically I find that Debian/Ubuntu will prompt with user@hostname's password:, whereas I see Password: on OpenSUSE/SLES/Mac servers.

Obviously the servers are configured differently, but I couldn't find what causes this difference. How can I configure the ssh server to display the user and hostname in the prompt? Or maybe I can do it client side?

Best Answer

Investigating a bit further, it appears that the user@server's password prompt is used for password authentication, whereas the Password: prompt is the displayed for keyboard-interactive authentication. I wasn't aware that these two methods existed. They look pretty similar as they will typically both ask for a password.

So the trick is to:

  1. Make sure password authentication is enabled on the server. In /etc/ssh/sshd_config:

    PasswordAuthentication yes
    
  2. On the client side, set password as the preferred method

    ssh -o PreferredAuthentications=password server2
    

    It is sensible to add the keyboard-interactive method to the list in case the server has PasswordAuthentication disabled

    ssh -o PreferredAuthentications=password,keyboard-interactive server2
    

    I ended up adding the following to my .ssh/config:

    Host *
            ServerAliveInterval 120
            VerifyHostKeyDNS yes
            PreferredAuthentications publickey,password,keyboard-interactive
    

I am now getting the user@server's password: prompt on all hosts.