Ob Shell oder sonst was,vergleich das mal mit HTTP, denn da passiert nix anderes.
Der Browser fordert bei einem Webserver eine Seite an, der Server antwortet mit einem Code, der besagt, ob eine Seite gefunden wurde oder nicht, oder verschoben wurde oder eine Authentifizierung notwendig ist. Nun kann man das aufsplitten:
1. Seite wurde gefunden:
1.1 Seite wird an den Client (Browser) geliefert
1.2 Client wird aufgefordert, sich zu identfizieren (Passwort-Abfrage etc)
1.3 Seite wird angezeigt, jedochmit Hinweis "Verschoben, demnächst bitte woanders anfordern"
2. Seite wurde nicht gefunden
2.1 Der Browser bekommt einen Fehlercode,den der Browser kennt und verarbeiten kann
3. Zugriff verweigert
3.1 Browser bekommt einen Fehlercode den er verarbeiten kann
Genauso läuft das mit einer Shell ab:
1. Der Client verbindet sich
1.1 Bei Erfolg Abfrage eines Passwortes
1.2 Client sendet Passwort zurück und erhält nun das STDIN (RemoteShell)
2. Der Client verbindet sich
2.1 Passwort falsch
2.2 Verbindung wird seitens des Servers geschlossen
Der Client erhält deshalb den STDIN, da der Client direkten Speicherzugriff auf dem Server benötigt. STDIN hat der Client jedoch programmiertechnisch auch auf seiner lokalen Konsole (meist Putty,wenn vom Windows - oder eben Bash etc bei Linux), da hier die Tastatureingaben gelesen werden müssen - somit entsteht eine Pipe, mit der die Daten asynchron übertragen werden und die Verbindung dadurchoffen gehalten werden kann ähnlicheinem Ping-Pong-Spiel: Client->Server->Anfrage<-Client-<-Server
Das STDOUT bekommt der Client, allerdings wird DIESES auf der RemoteShell nicht benötigt, da der Speicherinhalt zum Client gesendet wird unddort angezeigt wird.
LG
Andy