通常、$ BASH_ENVはどこに設定されますか?


19

同じように構成する必要があるツインLinuxサーバーがありますが、それらの1つに対するsshコマンドは、〜/ .bashrcで指定されたパスを必要とするコマンドに対して失敗します。たとえば、pwd対話型とsshの両方のようなコマンドを使用できますが、アプリケーションbinフォルダーにあるプログラムを実行しようとすると、いずれかのサーバーの対話型シェルでのみ機能します。

両方のサーバーの/ etc / profileファイルと/ etc / environmentファイルは同じですが、$ BASH_ENVは適切に動作しているサーバーで〜/ .bashrcに設定されます。動作していないサーバーに$ BASH_ENVを設定したいのですが、動作中のサーバーに設定したのと同じ場所に設定したいです。別のコンピューターからのsshコマンドなど、非対話型ログイン時にLinuxが実行される場所は何ですか?

編集:ユーザーの/ etc / passwdの行は、両方のサーバーで/ bin / bashを指定しています。両方のサーバーの〜/ .bash_profileファイルは同一であり、が含まれていますif [ -f ~/.bashrc ]; then . ~/.bashrc; fi。システム間の唯一の違いは、$ BASH_ENVが機能していないサーバー上のNULL文字列であり、機能しているサーバーのどこに設定されているかが見つからないことです。

編集2:両方のサーバーの〜/ .ssh / environmentファイルにはBASH_ENV =〜/ .bashrcがあります


1
/ etc / passwdは両方のサーバーで同一ですか?bashが「/ bin / bash」ではなく「/ bin / sh」として呼び出された場合、bashrcファイルは読み込まれません(プロファイルファイルのみ)。
freiheit

同一ではありませんが、コマンドを送信しているユーザーは、両方のシステムの/ etc / passwdに同じ行があります。
バジル

〜/ .profileと〜/ .bash_profileはどうですか?
freiheit

彼らは同一であり、両方が含まれていますif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
バジル

/ etc / bashrcと/etc/profile.d/*が同一であることを確認しましたか?〜/ .bash_login?/etc/pam.d/*?/etc/security/pam_env.conf?
freiheit

回答:


21

BASH_ENV環境、または初期化中にソースされた別のスクリプトを介してのみ設定されます。非対話型シェルの場合、そのシェルもログインシェルである場合にのみ、追加のファイルをソースしようとします。(その場合、それは読んであげる~/.bash_profile~/.bash_login~/.profile...しかし、それはそれをやっていた場合は、問題が発生してされません)

最初に確認する場所は、サブシェルが呼び出される環境です。

  • エクスポートされたBASH_ENV変数はパススルーされます。これはソースファイルに埋もれている可能性があることに注意してください。
  • スクリプトを呼び出す同じ行にパラメータとして入力できますBASH_ENV=blah /path/to/somecommand.sh。これは痛い親指のように目立つので、おそらくあなたはそれを捕まえたでしょう。

ログイン後に設定されているのにどこがわからない場合は、ログイン環境の構築を担当するものを調べる必要があります。

  • ログインシェルをソースとする通常のすべてのファイル。man bash完全なリスト。

  • PAM:コメントで指摘されているように、、/etc/security/pam_env.confおよびで参照される追加ファイルを確認してくださいpam_env.so。他のPAMモジュールも原因となる可能性がありますが、PAM構成が同一に見える場合は、おそらくそうではありません。

  • sshd:次のファイルを順番にスキャンします。

    • ~/.ssh/environment(ホームディレクトリに変更する前、PermitUserEnvironmentで有効になっている場合のみsshd_config
    • ~/.ssh/rc (ホームディレクトリに変更した後、常に)
    • /etc/ssh/sshrc~/.ssh/rc存在しない場合)

注:ユーザーの認証済みキーファイル(有効になっている場合)の行sshdもスキャンしますが、そのステップが上記のシーケンスに含まれるマニュアルページからは明確ではありません。environment=valuePermitUserEnvironment


違いが見つかりました!PermitUserEnvironment yes動作中のサーバーの/ etc / ssh / sshd_configに設定されますが、問題のあるサーバーには設定されません。変更しましたが、コマンドをテストしただけで、再び機能しませんでした。このファイルは、sshを試行するたびに解析されますか?作業しているユーザー用の〜/ .ssh / rcがなく、どちらのシステムにも/ etc / ssh / sshrcファイルがありません。
バジル

ああ、私はsshを再初期化する必要があると思いますか?/etc/init.d/sshd?
バジル

@Basilええ、再起動する必要がありますsshd。またsshd、環境を設定している作業サーバー上にファイルがある可能性があることを意味します(私が提供したファイルのリストを確認してください)。
アンドリューB

ええ、それはイライラする部分でした。必要なものはすべて実行されていなかった.bashrcに設定されています:)ご協力いただきありがとうございます。うまくいくと思います。
バジル

SSHの再初期化が完了し、非対話型SSHコマンドが機能するようになりました!ご協力ありがとうございました。私は自分でその分野を見つけたことがありませんでした。
バジル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.