RHEL 8.5 Bash v4.4.20とSSHは.bashrcを2回呼び出します。

RHEL 8.5 Bash v4.4.20とSSHは.bashrcを2回呼び出します。

最近、RHEL 8.5を実行する新しいリモートホストをインストールしました。私の環境の残りの部分はRHEL 7.4です。 RHEL 8.5ホストにSSHで接続するときに奇妙なことが見つかりました。私の.bashrc電話が2回出たようです。

動作は次のとおりです。

  • 次のコマンドを使用して、ゲートウェイからRHEL8.5ホストにsshを実行します。
    ssh -t user@rhel85host "IAM=peaves CONTROL=simulation bash -i"
    
  • デバッガとして「Hello World」を私に設定すると、.bashrc次のような結果が表示されます。
    Hello World
    
    Hello World
    
  • Bash呼び出しを削除しようとしましたが、-i同じ動作が発生しました(Hello World2回)。

bashシェルが最初に作成されたようですが、私が渡した2つのエントリのためにbashが再び呼び出されます。

以前この問題を解決した人はいますか?これを行わずにRHEL 7.4のように実行するためのsshログインまたはbash呼び出しのヒントはありますか?

答え1

SSH経由でコマンドを渡すいつもegを使用してシェルを介して実行します/bin/bash -c "the command"。これはOpenSSHが常に機能する方法です(最初からrshをエミュレートすると思います)。

変更された可能性は、RHELがbashをコンパイルする方法です。何らかの理由でbashコンパイル時オプション-cSSH接続オプションを介して実行するときに.bashrcをロードするかどうか。 (はい、sshdによって起動されたことを具体的に確認してください。)Debianはこのモードを有効にしますが、そうではありません。〜のように聞こえるRHELがこれを有効にし始めました。

(ユーザーのログインシェルをbash以外のものに変更しない限り)最初の呼び出しをオプトアウトする方法はありませんが、.bashrcで「すでに実行された」ことを知らせる環境変数を設定することができます。たとえば、

if [[ $_BASHRC_RUN ]]; then
    return
fi
export _BASHRC_RUN=1

ただし、.bashrcは通常、高価な「ログイン」タスクを実行するのに適した場所ではありません。これらのアクションは.profileまたは.bash_profileに配置する必要があり、.bashrcにはエイリアスや環境変数などのエントリのみを含める必要があります。

関連情報