profile.dの仕組みを理解するのに問題があります。私が知っている限り、ユーザーがログインするたびにスクリプトが実行されます。私は現在私のサーバーでCentOS 6.10を実行していますが、次のような奇妙な動作が発生します。
管理者の電子メールアドレスに電子メールを送信するように設計された/etc/profile.d
スクリプトがあります。誰かがこのスクリプトを介してログインすると、スクリプトが正しく実行され、電子メールが送信されます。ただし、スクリプトを実行するかどうかはログイン方法によって異なります。効果的な方法は次のとおりです。logchk.sh
/bin/mail
ssh user@serveradress
ssh user@serveradress
ホストシステムに関係なく、ユーザーに関係なくgit pull user@repoadress
電子メールスクリプトは実行されますが、次の場合にのみ可能です。一部ホストシステムに関係なくユーザー
以下は機能しません
git pull user@repoadress
一部のユーザーの場合- SSH をプロトコルとして使用して filezilla 経由で接続
したがって、サーバーに接続しているユーザーに応じて、git pull
FileZillaはスクリプトをトリガーしませんが、他のユーザーにはスクリプトをトリガーします。すべてのユーザーはbashシェルを使用し、ユーザーにroot権限があるかどうかにかかわらず、動作は同じです。
要約すると、このスクリプトはグローバル構成なので、一部のユーザーには実行され、他のユーザーには実行されない理由を理解できません。誰かが/etc/profile.d
スクリプトが実行される時期の詳細を提供できることを嬉しく思います。
答え1
バッシュに関するすべて
bash
マニュアルページでこの点から始めましょう。
bashが対話型ログインシェルまたはoptionsを含む非対話型シェルとして呼び出されると、
--login
まず/ etc / profileファイル(ファイルがある場合)からコマンドを読み取り、実行します。ファイルを読み込んだ後~/.bash_profile
、~/.bash_login
、 を順に探して存在~/.profile
し、読み取れる最初のファイルからコマンドを読み込み実行します。--noprofile
このオプションを使用すると、シェルの起動時にこの動作を無効にできます。[...]
ログインシェルではなくインタラクティブシェルを起動すると、bashは
~/.bashrc
ファイルが存在する場合にコマンドを読み取り、実行します。--norc
このオプションを使用すると、これを抑制できます。 file--rcfile
オプションはbashが~/.bashrc
。
そして:
rshd
Bashは、過去のリモートシェルデーモン(通常)またはセキュアシェルデーモンによって実行されたときなど、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとしますsshd
。 bashがこのように非対話型で実行中であると判断した場合~/.bashrc
(ファイルが存在して読み取れる場合)、コマンドを読み取り実行します。そうではありません
SSHに関するすべて
コマンドを指定せずにリモートサーバーにSSHで接続すると...
ssh [email protected]
/etc/profile
...これはサービスを受けるためにログインシェルを起動します。
一方、明示的に(のように)または暗黙的に(ssh接続を介して実行される他のツールを使用して)コマンドを実行すると、ssh [email protected] somecommand
git
rsync
非対話型シェルなのでサービスを受けられません/etc/profile
。上記の3番目のマニュアルページに示すように、ファイルbash
は非対話型シェルであるにもかかわらず読み続けられます。~/.bashrc
ドットファイルに関するすべて
このセクションで説明したドットファイルの特定の構成は、Fedora(およびおそらくほとんどのRHEL派生製品)にのみ適用されます。可能他のディストリビューションにも同様に適用されます。
ログインシェルを起動すると、bashはを読みます/etc/profile
。スクリプトには通常のファイルが含まれています/etc/profile.d
。したがって、誰かが実行されると、ssh user@serveraddress
対話型ログインシェルが起動し、bashがを読み取るため、スクリプトが/etc/profile
実行されますlogchk.sh
。
対話型非ログインシェルを起動するときまたはたとえば、ネットワーク接続を介して非対話型シェルを起動すると、ssh
bashは~/.bashrc
ファイルを読み込みます。.bashrc
ユーザーアカウント用に作成されたデフォルトファイルは次のとおりです。
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
そして/etc/bashrc
返品ソーススクリプトはで提供されています/etc/profile.d
。
したがって、誰かがデフォルト.bashrc
ファイルを持っている場合は、SSHを介してコマンドを実行すると(実行などgit pull user@repoaddress
)、スクリプトも実行されますlogchk.sh
。ただし、~/.bashrc
アカウントのデフォルトファイルを置き換えたり変更したりしてもソースが提供されなくなった場合は、明示的に決定しない限り/etc/bashrc
スクリプトは実行されません。/etc/profile.d
これにより、一部のユーザーの行動が異なる理由を説明できます。