Wie kann ich Verzeichnisse ändern und Bash-Optionen festlegen, wenn ich mich über SSH bei einem Remote-Server anmelde?

Wie kann ich Verzeichnisse ändern und Bash-Optionen festlegen, wenn ich mich über SSH bei einem Remote-Server anmelde?

Ich muss mich regelmäßig über SSH bei Remote-Hosts anmelden und verwende gerne die Bash-Option . set -o viNormalerweise muss ich cdmich in ein bestimmtes Verzeichnis einloggen. Da diese Hosts flüchtig sind (sie werden regelmäßig erstellt und gelöscht), kann ich mich nicht bei ihnen anmelden und sie in einem .bash_profile/ speichern .bashrc. Ich habe also nach einer Möglichkeit gesucht, dies zu tun, wenn ich mich über SSH verbinde, damit ich nicht bei jeder Verbindung mit einem Remote-Server dieselben Befehle eingeben muss. Ich habe verschiedene Möglichkeiten ausprobiert, um dies zu erreichen, aber keine davon scheint zu funktionieren. Kann mir jemand helfen, diesen Befehl richtig einzugeben? Kurz gesagt ist das, was ich tun möchte.

  1. cdin ein bestimmtes Verzeichnis
  2. Legen Sie die Bash-Option festset -o vi

So habe ich es versucht:

ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""

Ich denke, dass dies tatsächlich funktioniert, die SSH-Sitzung jedoch beendet wird, da die set -o viSitzung nach Ausführung des Befehls mit einer Meldung wie der folgenden getrennt wird:

Gemeinsam genutzte Verbindung zu remotehost.com geschlossen.

Gibt es eine Möglichkeit, die Sitzung nach der Ausführung dieser Befehle offen zu halten, oder gibt es eine andere Möglichkeit, das zu erreichen, was ich möchte?

Antwort1

Einige Optionen:

ssh -t [email protected] 'cd /data && exec bash --login -o vi'

(das funktioniert mit allen POSIX-ähnlichen Shells, einschließlich ksh/ zsh/ dash..., da es -osich um eine Standardoption des POSIX- shDienstprogramms handelt und vizufällig eine der Standardoptionen ist. Diese Befehlszeile ist auch mit Shells aller wichtigen Shell-Familien kompatibel, einschließlich Bourne, csh, rc, fish, sollte also unabhängig von der Login-Shell des Root-Benutzers dort funktionieren)

Oder:

ssh -t[email geschützt]„cd /data && exec env SHELLOPTS=vi bash --login“

Eigentlich möchten Sie die zweite nicht verwenden. Das bedeutet, dass die $SHELLOPTSVariable in der Umgebung vorhanden ist und alle bashAufrufe beeinflusst (und die nicht interaktiven erben die Aufrufe von interaktiven Shells, was zu allen möglichen Problemen führt).

Beachten Sie auch, dass bashes zwei Optionssätze gibt, einen, den Sie mit -o/ festlegen $SHELLOPTS, und einen, den Sie mit -O/ festlegen $BASHOPTS).

Antwort2

Machen Sie zwei Befehle daraus.

  1. Schreiben Sie die Befehle, die auf dem Remote-Host ausgeführt werden sollen, in eine Datei .bashrc.tmp.
  2. $ scp .bashrc.tmp [email protected]:
  3. $ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"

Auf diese Weise müssen Sie nicht einmal Ihr Original sichern .bashrc.

Antwort3

Um das Springen von einem Ordner zu einem anderen auf Ihrem Host zu vereinfachen, können Sie apparix installieren und Lesezeichen an den verschiedenen Stellen einrichten, zu denen Sie springen müssen, und dann to folderXin apparix Folgendes verwenden:https://micans.org/apparix/man/apparix.html

Antwort4

Ich verwende ein Remote-System mit einer gemeinsam genutzten Benutzer-ID, daher möchte ich die Startdateien nicht bearbeiten, da dies auch alle anderen betreffen würde. Ihr Beitrag hier hat mir vijedoch gezeigt, wie ich die gewünschte Option einstellen kann. Hier ist, was ich in meine ~/.ssh/configDatei eingefügt habe

Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi

was bemerkenswert einfach ist. Ich weiß nicht, welchen „CD“-Teil Sie wollen.

verwandte Informationen