Verwendung einer benutzerdefinierten .bashrc-Datei bei der SSH-Anmeldung

21

Ich habe festgestellt, dass ich mit der neuen Firma, mit der ich zusammenarbeite, häufig auf Linux-Server mit relativ kurzer Lebensdauer zugreifen muss. Auf jedem dieser Server habe ich ein Konto, aber jedes Mal, wenn ein neues erstellt wird, muss ich die Mühe machen, über meine .bashrc-Datei zu übertragen. Es ist jedoch möglich, dass der Server in ungefähr einem Monat nicht mehr verfügbar ist. Ich muss auch für kurze Zeiträume (Minuten) auf viele andere Server zugreifen, bei denen es sich nicht lohnt, Daten über meine .bashrc-Datei zu übertragen. Da ich jedoch an vielen Servern arbeite, bedeutet dies eine Menge Zeitverschwendung.

Ich möchte nichts an den Servern ändern, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, eine .bashrc-Datei für jede Verbindung zu erstellen. Wenn ich also eine SSH-Verbindung zu einem Server herstellte, wurden meine Einstellungen für diese Sitzung verwendet.

Wenn dies möglich ist, wäre es schön, wenn ich das Gleiche mit anderen Konfigurationsdateien wie gitconfig-Dateien machen könnte.

gsingh2011
quelle
Dies ist keine Lösung für einzelne Verbindungen, aber Sie werden sie möglicherweise immer noch als wertvoll erachten. Schauen Sie sich Basis auf GitHub. Weitere Details in dieser Antwort auf Super User-Community.
Codeforester

Antworten:

6

Ich denke, was Sie wollen, ist (in Ihrer .ssh / config auf dem Computer, von dem aus Sie eine Verbindung herstellen):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

dann können Sie herausführen mit:

source .bashrc

und sei auf deinem fröhlichen Weg. LocalCommand führt den Befehl auf dem Server aus, zu dem Sie eine Verbindung herstellen, wenn er dort ankommt, unmittelbar vor Ihrer eigentlichen Sitzung.

Ich würde auch sicherstellen, dass sshds auf den Servern mit konfiguriert sind PermitLocalCommand yes

Es gibt viele Möglichkeiten, wie Sie den LocalCommand optimieren können, damit er in Ihrer spezifischen Umgebung funktioniert - Sie können ihn beispielsweise von einem internen Webserver aus einrollen oder von einem nfs-Mount ziehen.

Quinn Murphy
quelle
Ein paar Notizen. Zuallererst denke ich, dass Sie die Reihenfolge der Dateien im scp-Befehl geändert haben, da ich meine Bash auf den Server übertragen möchte, und ich denke, Sie haben es umgekehrt. Zweitens können Sie einfach ; source /path/to/.bashrcnach dem scp-Befehl hinzufügen , damit er automatisch bezogen wird. Schließlich ist ein nicht sehr wichtiger Nachteil dieser Methode, dass ich mein Passwort zweimal eingeben muss. Aber am Ende hat es funktioniert, also danke.
Gsingh2011
Das tut mir leid! Hat mir den Kopf zerbrochen, tut mir so leid wegen der Verwechslung. Sind Sie in der Lage, kennwortlose Schlüssel-Setups in Ihrer Umgebung einzurichten? Wir haben das in unserer Umgebung und es ist eine schöne Sache. Ich bin froh, dass das funktioniert hat!
Quinn Murphy
@ gsingh2011: Dies source /path/to/.bashrcwird auf dem Computer ausgeführt, von dem aus Sie eine Verbindung herstellen. Befehle in LocalCommandhaben keinen Zugriff auf die SSH-Sitzung.
Oliver
@ Oliver Du hast recht. Ich habe mich entschlossen, die Beschaffung der .bashrc-Datei vom Remote-Computer aus zu automatisieren. Ich muss beim ersten Login ein paar Dinge auf der Serverseite ändern, aber es ist viel praktischer als das, was ich vorher tun musste.
Gsingh2011
16

Ich denke, Sie suchen nach sshrc: https://github.com/Russell91/sshrc

sshrc funktioniert genau wie ssh, aber es gibt auch ~ / .sshrc aus, nachdem Sie sich remote angemeldet haben.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Hiermit können Sie Umgebungsvariablen festlegen, Funktionen definieren und Befehle nach der Anmeldung ausführen. So einfach ist das und wirkt sich nicht auf andere Benutzer auf dem Server aus - auch wenn sie sshrc ebenfalls verwenden. Lesen Sie für eine erweiterte Konfiguration weiter.

RussellStewart
quelle
Bitte hör auf, mit Nur-Link-Posts zu spammen. Sie können problemlos Kommentare hinzufügen (was Ihre sshrc-bezogenen Posts sind).
Deer Hunter
3
Ich arbeite daran, sie alle zu reparieren!
RussellStewart
Getan. Zum ersten Mal war ich versucht, einen kurzen Nur-Link-Beitrag zu verfassen. Jetzt weiß ich es besser.
RussellStewart
1
Ich habe vor langer Zeit (vor sshrc) ein ähnliches sshrc geschrieben: github.com/fsquillace/pearl-ssh Es ist einfach effizienter, kleiner und ohne xxd-Abhängigkeiten.
user967489
1

Wenn Sie den Server noch nie zuvor aufgerufen haben, ist in ~ / .ssh / known_hosts kein Eintrag dafür vorhanden.

Sie können mit "ssh-keygen -F" nach einem bestimmten bekannten Host suchen, aber Sie müssen diese Ausgabe (grep) testen, da ssh-keygen bei einem Fehler nicht false zurückgibt. Beachten Sie, dass bei Verweisen auf einen Host durch unterschiedliche Bezeichner (IP-Adresse, Hostname, FQDN) diese jeweils als separate Instanzen behandelt werden.

Sie können einen Wrapper für ssh schreiben, der Ihre Benutzerumgebung beim ersten Anmelden auf diesen Host überträgt:

ssh-newenv () {if! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 gefunden:"; dann rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; SSH $ 1; }

Wenn Sie dies robuster machen möchten, können Sie überprüfen, ob auf dem Remote-Host eine bekannte Umgebungsdatei, ein Hash oder eine andere Markierung vorhanden ist.

Dr. Edward Morbius
quelle
0

Ich weiß nicht, ob es eine .bashrc-Datei pro Sitzung gibt.

Eine andere Lösung wäre, ein kleines Skript zu schreiben, das alle Ihre Lieblingskonfigurationen in Ihren neuen Ausgangsordner überträgt.

Vielleicht erstelle einfach einen Ordner mit all deinen Configs mit Pfaden und übertrage sie einfach mit scp

mögen

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

und dann a

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Das spart Zeit.

Christopher Perrin
quelle
0

Ich denke nicht, dass das möglich ist, da ssh nichts mit deinem zu tun hat .bashrc. Es ist die Shell, die diese Datei lädt, nicht ssh.

Einige Ideen:

  1. Richten Sie Ihr Remote-Basisverzeichnis ein, wenn Sie sich zum ersten Mal anmelden.
  2. Verwenden Sie NFS, um Ihr Basisverzeichnis mit Ihrer .bashrc-Datei auf jedem Server bereitzustellen. Auf diese Weise haben Sie überall die gleichen Einstellungen.
  3. Wenn Sie nur einige Umgebungsvariablen akzeptieren, die an die Remote-Server übertragen werden, sollten Sie die SendEnvOption aktivieren ( ssh_configweitere Informationen finden Sie auf der Manpage). Wenn der Server korrekt eingerichtet ist (dh AcceptEnvsshd_config enthält den entsprechenden Wert), können Sie SendEnvIhre Umgebungsvariablen auf den Remote-Host kopieren.
  4. Ich weiß nicht, ob das funktioniert, aber möglicherweise können Sie die ProxyCommandEinstellung (siehe ssh_configManpage) missbrauchen, um Ihre .bashrcoder andere Dateien zu senden, bevor Sie eine Verbindung zum Remote-Host herstellen. Das würde allerdings einige Tests erfordern. Stellen Sie sich auch darauf ein, dass dies die Funktion von scp beeinträchtigt.
Oliver
quelle
0

Ich denke, dass https://github.com/fsquillace/pearl-ssh das tut, was Sie brauchen.

Ich habe es vor langer Zeit geschrieben, bevor sshrc geboren wurde, und es hat mehr Vorteile im Vergleich zu sshrc:

  • Es sind keine Abhängigkeiten von xxd für beide Hosts erforderlich (die auf einem Remote-Host möglicherweise nicht verfügbar sind).
  • Pearl-ssh verwendet einen effizienteren Kodierungsalgorithmus
  • Es sind nur ~ 20 Codezeilen (wirklich leicht zu verstehen!)

Zum Beispiel:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
user967489
quelle