バッシュマニュアル説明する:
rshd
Bashは、リモートシェルデーモン(通常はシェルデーモン)やセキュアシェルデーモンによって実行されている場合など、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとしますsshd
。 Bashがこのように実行中であると判断した場合、~/.bashrc
ファイルが存在し、読み取ることができる場合は、コマンドを読み取り実行します。
このBashソースは次~/.bashrc
のとおりです。
ssh user@host :
しかし、このBashソースは次のとおりです~/.bash_profile
。
ssh user@host
仕様によると、これら2つのコマンドの間には違いはありません。どちらの場合も、標準入力がネットワーク接続に接続されていませんか?
ベストアンサー1
ログインシェルは最初に読み、/etc/profile
次に読みます~/.bash_profile
。
非ログインシェルを読ん/etc/bash.bashrc
でから~/.bashrc
。
これはなぜ重要ですか?
次の行のためman ssh
:
もし注文する指定すると、ログインシェルではなくリモートホストで実行されます。
つまり、sshコマンドにコマンド以外のオプションしかない場合は、次のようになります。
ssh user@host
ログインシェルが起動し、ログインシェルが読み込みます~/.bash_profile
。
SSHコマンドでは注文する、よい:
ssh user@host :
命令が行くところ:
(または何もしないところ)。
そうだろういいえ~/.bashrc
コンテンツを読むためにログインシェルを起動します。
リモート標準入力
リモート・システムの /dev/stdin に提供される tty 接続は、実際の tty または別のものにすることができます。
のための:
$ ssh isaac@localhost
/etc/profile sourced
$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
$ ls -la /proc/self/fd/0
lrwx------ 1 isaac isaac 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3
$ ls -la /dev/pts/3
crw--w---- 1 isaac tty 136, 3 Dec 24 19:35 /dev/pts/3
開始されたbashに見られるように、TTY(ネットワーク接続ではない)で終わります。
コマンドを使用したSSH接続の場合:
$ ssh isaac@localhost 'ls -la /dev/stdin'
isaac@localhost's password:
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
TTY リストは同じように始まりますが、/etc/profile はソースではありません。
$ ssh isaac@localhost 'ls -la /proc/self/fd/0'
isaac@localhost's password:
lr-x------ 1 isaac isaac 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]
これは、接続がパイプ(ネットワーク接続ではない)であることをシェルに通知します。
したがって、両方のテストケースでは、シェルは接続がネットワークから来ているかどうかを知らないため、読みません~/.bashrc
(ネットワーク接続についてのみ話している場合)。 ~/.bashrcを読みますが、他に理由があります。