SSHユーザーのバナー(ウェルカムメッセージ)を、ユーザーごとに特定のウェルカムメッセージと共に表示したい。
使用しているSSHサーバーを指定していません。私はOpenSSHを想定しています。
SSHバナーとMOTDは2つの異なるものであることに注意してください。
SSHターミナルではほとんど区別がつきませんが、SFTPクライアントなどでは動作が異なります。
MOTDは、対話型端末で印刷される単なるテキストです。したがって、たとえばSFTPクライアントには送信されません(送信できません)(後で詳しく説明します)。
MOTDは、OpenSSHで_/etc/motd
_にハードコーディングされています。 PrintMotd
ディレクティブを使用して、グローバルにのみオン/オフにすることができます。
ただし、一部のLinuxシステムでは、PrintMotd
は常にオフであり、代わりにMOTDがPAMスタックによって出力されます(_pam_motd
_モジュールを使用)。この場合は、_/etc/pam.d/sshd
_を介してオフにするか、モジュールのパラメーターとしてカスタム_motd=
_パスを指定できます。
SSHバナーは、特定のSSHパケット(SSH2_MSG_USERAUTH_BANNER)で送信される特別なSSH 2.0機能です。
そのため、SFTPクライアントなどの非ターミナルクライアントでも、それを処理してユーザーに表示できます。 バナーがWinSCP SFTP/SCPクライアントに表示される方法 の例を参照してください。
SSHバナーは _sshd_config
_Banner
と Match
ディレクティブ を使用して、ユーザー(またはグループまたはその他の基準)ごとに構成できます。
_Match User username1
Banner /etc/banner_user1
Match User username2
Banner /etc/banner_user2
_
Disable ssh banner for specific users or ips もご覧ください。
もちろん、メッセージ/バナーのカスタム実装を使用することもできます。カスタムロジックを使用して選択したメッセージをグローバルプロファイルスクリプトから印刷するだけです。
MOTDと同様に、これは非インタラクティブセッション(SFTPなど)では機能しません。
さらに重要なのは、それが機能しないだけでなく対話型端末のみのメッセージを出力することを確認する必要があることです。 OpenSSHが_/etc/motd
_に対して自動的に行うこと。対話型端末に対してのみ実行されるグローバルプロファイルスクリプトを使用するか、TERM
環境変数の値に基づいて条件付きでメッセージを出力します。
非インタラクティブセッションのメッセージを出力すると、SFTPやSCPなどの厳密なプロトコルを使用しているクライアントは中断されます。これは、クライアントがテキストメッセージをプロトコルメッセージとして解釈しようとして、失敗するためです。
例 WinSCP SFTP/SCPクライアントのドキュメントでのこのような問題の説明 を参照してください。
(WinSCPの作成者です)
"$HOME/.ssh/rc"
ファイルを使用して、やりたいことをアーカイブすることもできます
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
したがって、ユーザーごとに1つのssh rcを使用できます。