Seit neuestem nutze ich die fish Shell als neuen Standard auf meinen Systemen. Außerdem gibt es einige Fälle, bei denen ich mich mit VS Code direkt auf ein System verbinde über den “Remote Explorer”. Dabei musste ich feststellen, dass diese Verbindung nicht mehr funktioniert, wenn auf dem Zielsystem “fish” als Login-Shell eingesetzt wird. Der Grund dafür scheint zu sein, dass VS Code eine POSIX-kompatible Shell voraussetzt und deswegen in fish seine Skripte nicht ausführen kann.
Deswegen hier die kurze Information, wie man dieses Problem umgehen kann.
Neuer Eintrag in .ssh/config
Zur Verwaltung der Verbindungen kommt die normale SSH Konfigurationsdatei unter ~/.ssh/config zum Einsatz. Beispieleintrag:
Host system1
Hostname 192.168.1.10
User iceflom
Dafür jetzt einen neuen zusätzlichen Eintrag anlegen und dort die Angabe “RemoteCommand” ergänzen, zum Beispiel:
Host system1-vscode
Hostname 192.168.1.10
User iceflom
RemoteCommand /bin/bash
Das sorgt dafür, dass bei einer Verbindung dann die Bash genutzt wird anstatt der standardmäßig hinterlegten Login-Shell “fish”.
VS Code Einstellungen anpassen
In VS Code jetzt die Einstellungen öffnen (Mac: command + ,) und dort nach folgendem suchen: “Remote.SSH command”. Dabei erscheint eine als “Experimental” gekennzeichnete Option mit dem genauen Namen “Remote.SSH: Enable Remote Command”, die aktiviert werden muss.
Wird jetzt bei einer neuen Verbindung im Remote Explorer der neue Eintrag system1-vscode ausgewählt, funktioniert die Verbindung wieder problemlos.
Ergänzung: Eigene Konfig für VS Code
Anstatt den Eintrag in der Datei ~/.ssh/config zu duplizieren und zu ergänzen, könnte alternativ auch eine eigene SSH-Konfig für VS Code angelegt werden. Hier könnten dann auch nur die Systeme eingetragen werden, auf die eine Verbindung mit VS Code notwendig ist. Das hat den Vorteil, dass die Liste übersichtlicher bleibt.
Neue Datei anlegen
nano ~/.ssh/config_vscode
Der Inhalt könnte so aussehen:
Host *
RemoteCommand /bin/bash
Host system1
Hostname 192.168.1.10
User iceflom
Der erste Host *-Eintrag sorgt dafür, dass der dort defnierte RemoteCommand für alle Einträge in dieser Datei gilt. Damit muss dies nicht bei jedem Eintrag wiederholt werden.
VS Code Einstellung anpassen
In VS Code muss jetzt nur noch eingestellt werden, dass genau diese Datei genutzt werden soll. Dazu wieder die Einstellungen öffnen (Mac: command + ,) und nach “remote.SSH.configFile” suchen. In das Eingabefeld dann den Pfad zu der gerade neu angelegten Datei angeben: ~/.ssh/config_vscode.
Somit werden im Remote Explorer nur noch die Einträge angezeigt, die explizit in die neue Datei config_vscode aufgenommen worden sind.