Ich versuche, ssh
automatisch zu einem bestimmten Verzeichnis zu wechseln, wenn ich mich anmelde. Ich habe versucht, dieses Verhalten mithilfe der folgenden Anweisungen in zu erreichen ~/.ssh/config
:
Host example.net
LocalCommand "cd web"
Aber wenn ich mich anmelde, sehe ich Folgendes:
/bin/bash: cd web: No such file or directory
obwohl es auf jeden fall einen web
ordner in meinem heimatverzeichnis gibt. Selbst wenn Sie einen absoluten Pfad verwenden, erhalten Sie die gleiche Meldung. Um klar zu sein, wenn ich cd web
nach dem Einloggen tippe, komme ich in den richtigen Ordner.
Was vermisse ich hier?
BEARBEITEN:
Unterschiedliche Kombinationen von Anführungszeichen / absoluten Pfaden ergeben unterschiedliche Fehlermeldungen:
LocalCommand "cd web"
/bin/bash: cd web: No such file or directory
LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory
LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error
Dies lässt mich denken, dass die Anführungszeichen nicht vorhanden sein sollten und dass ein weiterer Fehler auftritt.
Antworten:
cd ist eine shell builtin. LocalCommand wird ausgeführt als:Was Sie tun möchten, kann nicht über SSH erreicht werden. Sie müssen die Shell auf irgendeine Weise ändern, z. B. über bashrc / bash_profile.<Bearbeitung fast ein Jahrzehnt später ...>
LocalCommand
ist sowieso nicht das, was du willst. Das läuft auf deiner Maschine. Sie möchtenRemoteCommand
. So etwas hat bei mir funktioniert:quelle
cd
Befehl~/.bashrc
stattdessen auf dem Remote-Server eingeben.Das funktioniert:
So erstellen Sie ein Verzeichnis, wenn es nicht existiert:
Wenn Sie
bash
dascd
Pfadende nicht ergänzen , beenden Sie das Programm, nachdem der Befehl ausgeführt wurde. Und wenn Sie nicht hinzufügen,--login
dann ist Ihr~/.profile
nicht bezogen.quelle
~/.bash_profile
cd /path/to/your/destination
/path/to/your/destination
quelle
cd /path/to/your/destination
an~/.bashrc
anstatt an anhängen~/.bash_profile
. Das Ergebnis sollte dasselbe sein.~/.bash_profile
oder~/.bashrc
dies nur den aktuellen Benutzer betrifft .Stabilere Lösung für den Fall, dass Sie die standardmäßige .bashrc-Datei ssh und überschreiben müssen. Dies ist in Fällen nützlich, in denen die Remote-Server-Umgebung über mehrere Dokumentstammverzeichnisse verfügt und von mehreren Benutzern verwendet wird.
Genauer:
.bashrc_tmp
Datei im/tmp
Verzeichnis auf dem Remote-Server mit einem Inhaltcd /path/to/dir
bash
mit der in Schritt 1 angegebenen Konfigurationsdatei ausgeführt. Dadurch kann zum gewünschten Verzeichnis gewechselt und die Standardeinstellung unterdrückt werden.bashrc
.alias
Befehl umschlossen, sodass er an der Eingabeaufforderung des ssh-Clients als aufgerufen werden kannssh_myserver
quelle
Hast du diese Direktive in deiner ssh Konfiguration aktiviert?
Der Standardwert hierfür ist
no
, in welchem Fall IhreLocalCommand
Direktive ignoriert wird.Haben Sie alternativ versucht, den Befehl zu Ihrer
.bashrc
Datei hinzuzufügen ?quelle
Ich habe viele Websites durchsucht (Stackoverflow, diese), aber nicht gefunden, was ich wollte. Am Ende habe ich mein eigenes Shell-Skript erstellt. Ich füge es hier ein. Sie können es auch in ein Verzeichnis in $ PATH kopieren.
Also danach. Ich mache:
Hinweis: Möglicherweise müssen Sie sich abmelden und erneut anmelden, nachdem Sie die Pfadvariable geändert haben
quelle
In Ihrem
~/.ssh/config
:Am Ende Ihres
~/.bashrc
:Ich habe versucht, dies mit der Variablenübergabe zu tun, auch mit einer exportierten Variablen, aber diese Befehle werden in verschiedenen Shells ausgeführt.
Beim Testen, was Sie versucht haben, ist mir übrigens kein Fehler unterlaufen, als ich den absoluten Pfad ohne Anführungszeichen verwendet habe. Ich habe
; pwd
am Ende des Befehls hinzugefügt und das richtige Verzeichnis wird angezeigt, jedoch das Verzeichnis, in dem ich lande~
.cd
Meine Shell-Startdateien enthalten keine Befehle. Ich habe versucht , eine andere setzencd somedir; pwd
in~/.ssh/rc
(mit der anderen noch an seinem Platz). Derconfig
Befehl wird ausgeführt, bevor die motd ausgegeben wird, und derrc
Befehl wird anschließend ausgegeben, jedoch bevor die Shell-Startdateien bezogen werden. Also nochmal, es passiert in einer anderen Shell.Probieren Sie die Passing-by-File-Technik aus und lassen Sie mich wissen, ob sie bei Ihnen funktioniert.
quelle
Haben Sie es ohne Anführungszeichen versucht? Die einzigen Beispiele, die ich gesehen habe, haben sie nicht. Daher könnte es sein, dass Sie versuchen, cd \ web als Befehl auszuführen.
quelle
Sie können dies auch mit der Option versuchen
-t
:quelle
Versuchen Sie es
RemoteCommand
stattdessen mit, zquelle