Powłoka logowania najpierw czyta, /etc/profile
a następnie ~/.bash_profile
.
Powłoka niezalogowana odczytuje /etc/bash.bashrc
odtąd ~/.bashrc
.
Dlaczego to takie ważne?
Z powodu tej linii w man ssh
:
Jeśli podano polecenie, jest ono wykonywane na zdalnym hoście zamiast powłoki logowania.
Innymi słowy, jeśli polecenie ssh ma tylko opcje (nie polecenie), na przykład:
ssh user@host
Rozpocznie się powłoka logowania, czytana jest powłoka logowania ~/.bash_profile
.
Polecenie ssh, które ma takie polecenie , jak:
ssh user@host :
Gdzie jest polecenie :
(lub nic nie rób).
To będzie nie uruchomi powłokę logowania, więc ~/.bashrc
to, co będzie czytać.
Zdalne wejście
Dostarczone połączenie tty dla / dev / stdin w komputerze zdalnym może być rzeczywistym tty lub czymś innym.
Dla:
$ ssh sorontar@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 sorontar sorontar 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3
$ ls -la /dev/pts/3
crw--w---- 1 sorontar tty 136, 3 Dec 24 19:35 /dev/pts/3
Który kończy się na TTY (nie połączenie sieciowe), gdy widzi to uruchomiona bash.
W przypadku połączenia ssh z poleceniem:
$ ssh sorontar@localhost 'ls -la /dev/stdin'
sorontar@localhost's password:
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
Lista TTY zaczyna się tak samo, ale pamiętaj, że nie podano źródła / etc / profile.
$ ssh sorontar@localhost 'ls -la /proc/self/fd/0'
sorontar@localhost's password:
lr-x------ 1 sorontar sorontar 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]
Co mówi powłoce, że połączenie jest potokiem (a nie połączeniem sieciowym).
Tak więc w obu przypadkach testowych powłoka nie może wiedzieć, że połączenie pochodzi z sieci i dlatego nie czyta ~/.bashrc
(jeśli mówimy tylko o połączeniu z siecią). Czyta ~ / .bashrc, ale z innego powodu.