OpenSSH (am wahrscheinlichsten, was Sie ausführen) entscheidet, ob Sie eine Login-Shell erstellen möchten oder nicht. Dies geschieht nur, wenn Sie keinen bestimmten Befehl ausführen. Von man ssh
:
If command is specified, it is executed on the remote host instead of a login shell.
Es ist also eine Implementierungsentscheidung für den SSH-Server, ob er eine Login-Shell erstellen möchte oder nicht, und wenn Sie einen Befehl zur Ausführung geben, ist dies nicht der Fall.
Während ssh
ein Login ausgeführt wird, wenn Sie einen Befehl ausführen und beenden, ist es dem Erstellen einer Shell viel ähnlicher, nur um diesen Befehl auszuführen, als wenn Sie eine Login-Umgebung erhalten. Es scheint, dass die Leute, die OpenSSH schreiben, beschlossen haben, es als eine solche Aufgabe zu behandeln.
Sie erstellen eine nicht interaktive, nicht angemeldete Shell, um den Befehl auszuführen, da dies der Sinn ist, einen Befehl in einem anderen Kontext / in einer anderen Shell auszuführen. Normalerweise würden nicht interaktive Shells nicht automatisch beschafft, ~/.bashrc
was hier eindeutig geschieht. bash
versucht eigentlich, uns hier draußen zu helfen. Aus den Unterlagen
Wird vom Remote-Shell-Daemon aufgerufen
Bash versucht zu ermitteln, wann es ausgeführt wird, wobei seine Standardeingabe an eine Netzwerkverbindung angeschlossen ist, wie dies vom Remote-Shell-Daemon (normalerweise rshd oder dem sicheren Shell-Daemon sshd) ausgeführt wird. Wenn Bash feststellt, dass es auf diese Weise ausgeführt wird, liest und führt es Befehle aus ~ / .bashrc aus, sofern diese Datei existiert und lesbar ist. Es wird dies nicht tun, wenn es als sh aufgerufen wird. Die Option --norc kann verwendet werden, um dieses Verhalten zu verhindern, und die Option --rcfile kann verwendet werden, um das Lesen einer anderen Datei zu erzwingen. Weder rshd noch sshd rufen jedoch normalerweise die Shell mit diesen Optionen auf oder erlauben die Angabe.