Primero se lee un shell de inicio de sesión /etc/profile
y luego ~/.bash_profile
.
Un shell sin inicio de sesión lee desde /etc/bash.bashrc
y luego ~/.bashrc
.
¿Por qué es eso importante?
Debido a esta línea en man ssh
:
Si se especifica el comando , se ejecuta en el host remoto en lugar de un shell de inicio de sesión.
En otras palabras, si el comando ssh solo tiene opciones (no un comando), como:
ssh user@host
Se iniciará un shell de inicio de sesión, se lee un shell de inicio de sesión ~/.bash_profile
.
Un comando ssh que tiene un comando , como:
ssh user@host :
Donde está el comando :
(o no hacer nada).
Será no abrir una shell de inicio de sesión, por lo tanto, ~/.bashrc
es lo que va a ser leído.
Remolino estándar
La conexión tty suministrada para / dev / stdin en la computadora remota puede ser un tty real o algo más.
Por:
$ 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
Que termina en un TTY (no una conexión de red) como lo ve el bash iniciado.
Para una conexión ssh con un comando:
$ 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
La lista de TTY comienza igual, pero tenga en cuenta que / etc / profile no se obtuvo.
$ 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]
Lo que le dice al shell que la conexión es una tubería (no una conexión de red).
Entonces, en ambos casos de prueba, el shell no puede saber que la conexión es de una red y, por lo tanto, no lee ~/.bashrc
(si solo hablamos de la conexión a una red). Se lee ~ / .bashrc, pero por una razón diferente.