Một vỏ đăng nhập đầu tiên đọc /etc/profile
và sau đó ~/.bash_profile
.
Một vỏ không đăng nhập đọc từ /etc/bash.bashrc
và sau đó ~/.bashrc
.
Tại sao điều đó quan trọng?
Vì dòng này trong man ssh
:
Nếu lệnh được chỉ định, nó được thực thi trên máy chủ từ xa thay vì vỏ đăng nhập.
Nói cách khác, nếu lệnh ssh chỉ có các tùy chọn (không phải lệnh), như:
ssh user@host
Nó sẽ bắt đầu một vỏ đăng nhập, một vỏ đăng nhập đọc ~/.bash_profile
.
Một lệnh ssh có lệnh , như:
ssh user@host :
Trường hợp lệnh là :
(hoặc không làm gì).
Nó sẽ không bắt đầu một vỏ đăng nhập, do đó ~/.bashrc
là những gì sẽ được đọc.
Từ xa stdin
Kết nối tty được cung cấp cho / dev / stdin trong máy tính từ xa có thể là một tty thực tế hoặc một cái gì đó khác.
Dành cho:
$ 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
Kết thúc bằng TTY (không phải kết nối mạng) khi bash bắt đầu nhìn thấy nó.
Đối với kết nối ssh với lệnh:
$ 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
Danh sách của TTY bắt đầu giống nhau, nhưng lưu ý rằng / etc / profile không có nguồn gốc.
$ 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]
Nó báo cho vỏ rằng kết nối là một đường ống (không phải là kết nối mạng).
Vì vậy, trong cả hai trường hợp thử nghiệm, shell không thể biết rằng kết nối là từ một mạng và do đó không đọc được ~/.bashrc
(nếu chúng ta chỉ nói về kết nối với mạng). Nó đọc ~ / .bashrc, nhưng vì một lý do khác.