I want to display banner (welcome message) for SSH users with a specific welcome message for each user.
You did not specify, what SSH server are you using. I'm assuming OpenSSH.
Note that the SSH banner and the MOTD are two different things.
While almost indistinguishable in an SSH terminal, they have a different behavior, for example, in an SFTP client.
The MOTD is just a text printed on an interactive terminal. So, it won't (and cannot) be sent to SFTP clients, for example (more about that later).
The MOTD is hard-coded to the
/etc/motd in OpenSSH. You can turn it on/off globally only, using the
On some Linux systems, however, the
PrintMotd is always off and the MOTD is printed by the PAM stack instead (using the
pam_motd module). In this case you can turn it off via the
/etc/pam.d/sshd or specify a custom
motd= path as a module parameter.
The SSH banner is a special SSH 2.0 feature, sent in a specific SSH packet (SSH2_MSG_USERAUTH_BANNER).
As such, even non-terminal clients, like SFTP clients, can process it and display to user. See how the banner displays in WinSCP SFTP/SCP client for example.
The SSH banner is configurable per user (or group or other criteria) in the
sshd_config using the
Banner and the
Match User username1 Banner /etc/banner_user1 Match User username2 Banner /etc/banner_user2
Of course, you can also use a custom implementation for the message/banner. Simply print a message selected using your custom logic from a global profile script.
As with the MOTD, this won't work for non-interactive sessions (the SFTP and alike).
More importantly, not only it won't work, you need to make sure that you print the message for an interactive terminal only. What OpenSSH does automatically for the
/etc/motd. Either use a global profile script that executes for an interactive terminal only, or print the message conditionally based on value of the
TERM environment variable.
If you print the message for non-interactive session, you break any client that uses a strict protocol, such as the SFTP or the SCP, as the client will try to interpret your text message as a protocol message, failing badly.
See for example description of such issue in documentation of WinSCP SFTP/SCP client.
(I'm the author of WinSCP)
You can use
"$HOME/.ssh/rc" file too for archive what you want to do
echo "echo Hello World" > /home/pluto/.ssh/rc ssh pluto@localhost Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain Hello World
So, you can have one ssh rc for every user.