web-dev-qa-db-ja.com

SSHの事前ログインスクリプトを実行する

ログイン前の段階で、sshセッションが開かれたときに、mailxを使用してメールを送信するなど、ローカルサーバースクリプトを実行する方法を知りたいのですが。

ssh接続がサーバーに着信したとき、スクリプトの事前ログインを実行したいと思います。

例...

Client_SSH >> **{server_script_exec}** >> login_Prompt  >> Server       [login failed]

これを検索しようとしましたが、.bashrcなどを介して、ログイン後に実行されるスクリプトのみを取得しているようです。

洪水にさらされていることはわかっていますが、ログイン前のプロセスについて学びたいと思います。サーバーは制御された環境にあり、wwwに公開されていません。

4
Dusty Boshoff

これには PAM を使用できます。 SSHサービスのPAM設定は/etc/pam.d/sshdにあります。ログインプロセスで何かの前にコマンドを実行するには、次のようなものを追加します。

auth [default=ignore] pam_exec.so /path/to/some/script

たとえば、次を含む/usr/local/bin/foo.shを使用する場合:

#! /bin/sh

cat <<EOF >>/tmp/log
PAM_RHOST $PAM_RHOST  
PAM_RUSER $PAM_RUSER  
PAM_SERVICE $PAM_SERVICE  
PAM_TTY $PAM_TTY  
PAM_USER $PAM_USER  
PAM_TYPE $PAM_TYPE  
EOF

そして、私はssh muru@localhostを行い、私は得る:

$ cat /tmp/log
PAM_RHOST localhost
PAM_RUSER
PAM_SERVICE sshd
PAM_TTY ssh
PAM_USER muru
PAM_TYPE auth

これは、パスワードプロンプトが表示されるまでは発生しませんが、authモジュールはパスワードが入力された後に最初に実行されるモジュールです。ユーザーが認証されているかどうかをチェックします。

authentication - authenticate a user and set up user credentials.
   Typically this is via some challenge-response request that the user
   must satisfy: if you are who you claim to be please enter your
   password. Not all authentications are of this type, there exist
   hardware based authentication schemes (such as the use of smart-cards
   and biometric devices), with suitable modules, these may be substituted
   seamlessly for more standard approaches to authentication - such is the
   flexibility of Linux-PAM.

したがって、実際には、ログイン前にauthモジュールが実行され、最初のauthモジュールが pam_exec である場合、それがほとんど最初に実行されます。

[default=ignore]の部分に注意してください-authモジュールはユーザーを認証するため、スクリプトの終了ステータスが意味を持たないようにします。 default=ignoreは、pam_execの戻り値を無視するようにPAMに指示します。これは、スクリプトの終了ステータスに依存します。詳細については、 man pam.d を参照してください。

警告:

  • ユーザーがパスワードを入力する前に終了した場合、これは実行されません。
  • ユーザーがemptyパスワードを提供した場合、これは実行されません(デフォルトのSSH構成にはPermitEmptyPasswords noがあるため、SSHはそれらを手に入れられません)。
  • SSHでPAMを使用するには、UsePAM yesが必要です。
4
muru