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