web-dev-qa-db-ja.com

ユーザーごとのSSH MOTD

SSHユーザーのバナー(ウェルカムメッセージ)を、ユーザーごとに特定のウェルカムメッセージと共に表示したい。

17
user260277

使用している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_BannerMatchディレクティブ を使用して、ユーザー(またはグループまたはその他の基準)ごとに構成できます。

_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の作成者です)

39
Martin Prikryl

"$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を使用できます。

9
c4f4t0r