誰かがSSH経由でLinuxボックスにログインするたびにプログラムを実行する


10

小さなSSHサーバーがあり、誰かがSSH経由でログインするたびに実行するスクリプトを書きたいのですが。

さて、どうすればいいですか?

ANYBODYがログインするたびにスクリプトを実行したいのですが、少なくともログインしたユーザーのユーザー名とログインしたユーザーのIPアドレスにアクセスできる必要があります。

を使用することを考えまし/etc/bash.bashrcたが、それは良い解決策ですか?たとえば、ユーザーがその使用を無効にして、スクリプトを無効にする方法はありますか?はいの場合、私のその他のオプションは何ですか?

ありがとう。


もちろん、これはユーザーがbashを使用している場合にのみ機能します。ユーザーが自分のシェルを選択できる場合は機能しません。
–PaŭloEbermann 2011

回答:


12

使用するメカニズムは、目的によって異なります。

あなたが何かを提供したい場合に便利優しいのユーザーのために、そしてあなたは/etc/profile、すべてのユーザーが同じシェルを使用する場合は合理的に十分です。経由でログインしたときにのみコマンドを実行する場合は、コマンドをsshに配置します/etc/ssh/sshrc。(ユーザーが自分の~/.ssh/rcファイルでコマンドを上書きしてもかまわない場合。)

あなたがしたい場合は、強制一つのプログラム、実行するユーザーをして1つのプログラムだけ、その後、ForceCommandDigitalRossによって記載されているようにオプションを良いアプローチです。(私は個人的に、ユーザーがAppArmorSELinuxTOMOYO、またはSMACKなどの必須のアクセス制御システムでさらに制限し、プログラムがユーザーの脱出を許可しないことを保証します。私はAppArmorに10年間取り組んできました。私が最初に選択するツールですが、他のツールは優秀なプログラマーによって書かれた素晴らしいツールです。)

1つのプログラムだけを実行し、ユーザーの邪魔にならないようにする場合、最適なアプローチはpam_exec(8)、バイパスされず、シェルに関係なく機能し、ユーザーまたはユーザーとして実行する簡単な機能を提供するモジュールを使用することです。承認を実行するプログラムのアカウント。マンページには次の例が示されています。

   Add the following line to /etc/pam.d/passwd to rebuild the
   NIS database after each local password change:

               passwd optional pam_exec.so seteuid make -C /var/yp

   This will execute the command

       make -C /var/yp

   with effective user ID.

これは、上で実行するように拡張することができauthaccountpassword、およびsessionアクション。sessionログイン時に実行するのがおそらく最善でしょう。次のような行を追加するだけです。

session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd

あなたへの/etc/pam.d/sshd制御ファイル。


以下のように見えるpam_execモジュールは、私が探しているまさにです。ありがとう!
houbysoft

2
WATCH OUT、実行したコマンドがゼロ以外の終了コードで終了した場合、ログインは失敗し、ロックアウトされる可能性があります。これを解決する1つの方法は、常に成功する別のモジュールで呼び出される別の「オプションのセッション」があることを確認することです。
gflarity 2016年

4

OpenSSHの新しいバージョンには、ForceCommandと呼ばれるサーバー機能があり、ユーザーが意図した操作(scp、sshなど)ではなく、スクリプトを制御できます。スクリプトには元のコマンドが渡されるので、必要なことをすべて実行した後、おそらくそれにチェーンすることができます。

sshd_config(5)から:

ForceCommand

ForceCommandによって指定されたコマンドの実行を強制します。クライアントおよび〜/ .ssh / rcが存在する場合は、それらによって提供されたコマンドを無視します。コマンドは、-cオプションを指定したユーザーのログインシェルを使用して呼び出されます。これは、シェル、コマンド、またはサブシステムの実行に適用されます。Matchブロック内で最も役立ちます。クライアントが最初に提供したコマンドは、SSH_ORIGINAL_COMMAND環境変数で使用できます。「internal-sftp」のコマンドを指定すると、ChrootDirectoryで使用する場合にサポートファイルを必要としないインプロセスsftpサーバーの使用が強制されます。

これを1回使用してscpをオーバーライドし、gemをアップロードする権限を与えられたすべてのユーザーに、不要または不要なインタラクティブなアクセスを与えることなく、gemの安全なアップロードを提供しました。


3

1つの方法は、syslog-ngをsyslogデーモンとして使用し、特定のログエントリ(sshログインの成功など)が一致するたびにスクリプトバックグラウンドを実行するように構成することです。


0

これをチェックしてください:

http://ubuntuforums.org/showthread.php?p=9383927

これを実行しないようにする方法はないと思います。他の誰かがこれを確認できますか?


それ(/etc/profileまたは~/.profile)は、ユーザーのシェルに依存しbashrcます。ユーザーがbashなどを使用している場合は、これで問題ありません。
–PaŭloEbermann 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.