Ich möchte SSH und Bildschirm so konfigurieren, dass eine Anmeldung immer wieder mit einer Bildschirmsitzung verbunden wird. Im Idealfall würde diese Sitzung nicht beendet, sondern getrennt, wenn ich Cd drücke. Wie kann das erreicht werden? Und welche weiteren nützlichen Einstellungen erleichtern mein SSH-Leben?
quelle
Ich habe in meinem .bash_profile auf meinen Remote-Servern Folgendes:
Damit werden zwei Dinge erreicht: Erstens wird eine Shell-Funktion eingerichtet, um die Shell zu ersetzen und die ssh-agent-Verbindung fortzusetzen. Zweitens wird die Funktion nach einer Pause von einigen Sekunden aufgerufen (falls der Bildschirm nicht gestartet werden soll).
Die erste
if
Klausel ist wahr, wenn screen (-z "${STY}"
) noch nicht an ein Terminal (-t 0
) angehängt ist und sudo nicht ausgeführt wird (was sich manchmal nicht ändert$USER
).Die
reattach
Funktion prüft zunächst, ob ssh mit einem aktiven ssh-Agent-Port (-n "${SSH_AUTH_SOCK}"
) aufgerufen wurde . Dann wird alles, was sich gerade in~/.ssh/agent-script
der aktiven Socket-Datei befindet, ersetzt und die Umgebungsvariable ($SSH_AUTH_SOCK
) durch den neuen Wert ersetzt. Das Skript ersetzt dann die aktuelle Shell durch eine einzelnescreen
Sitzung (wobei sicherzustellen ist, dass nur eine Sitzung vorhanden ist). Alle Argumente für diereattach
Funktion werden an command (${1:+"$@"}
) übergeben.Der letzte Teil entfernt zuerst alle toten Sitzungen (
screen -wipe
), teilt dem Benutzer (mir) mit, dass der Bildschirm in Kürze gestartet wird, und kann stattdessen durch Drücken von Ctrl- zur Shell zurückkehren C. Dann wartet es 5 Sekunden und ruft diereattach
Funktion auf.quelle
Erstens, wenn Sie byobu verwenden, können Sie eine neue Shell-Sitzung so konfigurieren, dass byobu immer automatisch gestartet wird (was im Wesentlichen eine nette Bildschirmkonfiguration ist, obwohl neuere Versionen möglicherweise tmux als Backend verwenden). Wenn Sie Byobu wirklich nicht wollen, können Sie den Bildschirm wahrscheinlich so einstellen, dass die Verbindung manuell hergestellt wird, indem Sie Ihr
.profile
oder ein anderes Shell-Konfigurationsskript wie folgt bearbeiten:exec screen
ifTERM != "screen"
.Wenn Ihnen das nicht gefällt, können Sie mit der
authorized_keys
Datei einen bestimmten Befehl für Verbindungen mit einem bestimmten Schlüssel ausführen (und Sie können so viele Schlüssel haben, wie Sie möchten). Sieheman sshd
für weitere Einzelheiten. Ich würde vorschlagen, dass Sie den Befehl veranlassen, ein Skript auszuführen, das prüft, ob der Bildschirm ausgeführt wird und eine Verbindung hergestellt wird, oder eine neue Sitzung startet.In Verbindung zu trennen bei Strg-D können Sie in Ihrem Bildschirm Tastenzuordnungen einrichten
.screenrc
. Sieheman screen
für weitere Einzelheiten. Du suchst nach "bindkey".quelle
Vielleicht völlig irrelevant für Ihre Frage, aber haben Sie jemals darüber nachgedacht, TMUX stattdessen zu verwenden? Es bietet eine Menge Funktionen, nach denen Sie sofort suchen.
Z.B. Wenn Sie unter TMUX die Verbindung zu einer SSH-Sitzung trennen, müssen Sie lediglich ssh zurücksetzen und "tmux a" ausführen, um eine Verbindung zu Ihrer Sitzung herzustellen. Seit ich TMUX benutze, habe ich vergessen, was Nohup / Disown-Befehle sind ... wenn Sie etwas ausführen und sich abmelden müssen - führen Sie es in tmux aus und trennen Sie es. Die Befehlsausgabe wird gepuffert, sodass Sie sie später überprüfen können.
Zum automatischen Anhängen können Sie Folgendes zu .bashrc hinzufügen:
oder noch einfacher
Es hat weniger Speicherbedarf und insgesamt IMHO viel besser / einfacher zu bedienende Option.
Die Meta-D-Verknüpfung ist die Standardzuordnung zum Trennen in TMUX.
quelle
screen -dAr default || screen -AS default
funktioniert bei mir. Ich füge das zu meinem ~ / .bashrc hinzu .Erklären Sie kurz die Schalter:
d
- Trennen Sie den Bildschirm von einer anderen Sitzung, wenn er noch verbunden ist.A
- Passen Sie die Fenster im Bildschirm an die neue Terminalgröße an.r default
- An einen Bildschirm namens Standard anhängen.Wenn der erste Bildschirmbefehl (der vorherige
||
) nicht erfolgreich ist, wird der zweite ausgeführt:A
- Wie oben erklärt ...S default
- Erstellen Sie die neue Bildschirmsitzung mit dem Standardnamen .quelle
Ich schlage vor, Byobu zu verwenden . Dieses Tool verwendet tmux und bietet eine schöne Symbolleiste und andere praktische Fensterschaltfunktionen, Hotkeys usw.
Mit diesen Befehlen kann das System nach einer erfolgreichen SSH-Anmeldung versuchen, eine Verbindung zu einer vorhandenen byobu-tmux-Sitzung herzustellen, andernfalls wird eine neue Sitzung erstellt.
quelle