SSHで作業するときにBashが非対話型モードで.bashrcを取得するのはなぜですか?

SSHで作業するときにBashが非対話型モードで.bashrcを取得するのはなぜですか?

CentOS仮想マシンがあり、SSHを使用してログインします。次の行を追加します。.bashrc

echo "from ~/.bashrc: (pid $$)"

そして次の行.bash_profile

echo "from ~/.bash_profile"

仮想マシンにログインして実行すると、ps次の結果が表示されます。

user@laptop:~ $ ssh vmcentos
Last login: Sun May 17 04:48:24 2020 from 192.168.122.1
from ~/.bashrc: (pid 1821)
from ~/.bash_profile
[admin@localhost ~]$ ps -H -o pid,command
  PID COMMAND
 1821 -bash
 1844   ps -H -o pid,command
[admin@localhost ~]$

この出力は、私がログインしたシェルがインタラクティブなログインシェルであるために期待した結果です。したがって、.bash_profileファイルのソースは次のようになります.bashrc

次に、仮想マシンからログアウトし、次のコマンドを実行します。

user@laptop:~ $ ssh vmcentos 'sleep 60; echo $-'
from ~/.bashrc: (pid 1901)
hBc
user@laptop:~ $

その後、仮想マシンの他のセッションにログインしてsshプロセステーブルを確認しました。

[admin@localhost ~]$ ps -eH -o pid,command
  PID COMMAND
(... more output here...)
 1900       sshd: admin@notty
 1901         bash -c sleep 60; echo $-
 1914           sleep 60
(... more output here...)

私が理解している限り、ssh実行シェル(プロセス1901)は非対話型(options-c$-変数にi文字が含まれていないため)と非ログイン(ARGV0非対話型であり、オプションが提供されてい-bashないため)です。--loginしたがって、それは調達または調達されてはいけません.bashrc.bash_profileただし、このコマンドの出力にはその.bashrcソースが明確に表示されます。なぜ?

私は標準のCentOSインストールと標準openssh設定を使用しています。

ベストアンサー1

マニュアルによると、そうしなければならない。:

rshdBashは、リモートシェルデーモン(通常はシェルデーモン)やセキュアシェルデーモンによって実行されている場合など、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとしますsshd。 Bashがこのように実行中であると判断した場合、~/.bashrcファイルが存在し、読み取ることができる場合は、コマンドを読み取り実行します。

Bashの起動ファイルが奇妙です。

おすすめ記事