tmux als login shell

oxy

Staatl. gepr. Destroyer
Hallo,

Ich würde gerne beim Login per SSH auf meinen FreeBSD Rechner zu einer vorhandenen tmux-Intstanz mich verbinden (oder ggf eine erstellen), dort ein neues Fenster öffnen, und beim Detach die ssh Verbindung wieder kappen.

Ich habe jetzt ein wenig rumgesucht und probiert, und habe nichts gefunden was mit der tcsh funktioniert, oder überhaupt so funktioniert wie ich mir das vorstelle.

Ich denke schon, dass das möglich sein sollte, aber trivial ist's eben nicht, hat vielleicht schon jemand was fertiges? Oder bin ich einfach nur zu blöd gerade?

Gruß & Dank im Voraus
oxy
 
Das ist an sich möglich. Ich hab im Moment mein Rechner nicht zur Hand zum nachsehen, aber als Hinweise:

- ssh kann automatisch einen Befehl auf dem Server ausführen (war das -c ? - man hilft dir). Ausführen tust du dann folgendes Script
- auf dem Remoterechner machst du ein Script werlches mit "tmux ls" erst mal sucht ob es deine session schon gibt. Falls ja "attach" falls nein "new". Daran denken, dass du dem ganzen einen Sinnvollen Sessionnamen gibts.

Wenn ich heute Abend dazu komme nachzusehen kann ich dir mal was raussuchen.
 
Du kannst das auch in deine .profile (je nach shell auch anders) aufnehmen.. Aber vorher prüfen, ob es eine interaktive shell ist und ob es nicht innerhalb von tmux läuft.
 
Zum Verbinden dann einfach sowas:
Code:
ssh -t user@server SCRIPT


Und zum Starten beispielsweise ein kleines Perl-Script alla (aus dem Kopf raus.. also keine Garantie):
Code:
#!/usr/bin/perl
$sessionname = "meineSession";

sub laeuft{
        my $laeuft;
        $laeuft = 0;
        @screens = `tmux ls`;

        foreach (@screens){
                if ($_ =~ /^\s*$sessionname:/){
                        $laeuft = 1;
                }
        }
        return $laeuft;
}

if (&laeuft){
    exec "tmux attach -t $sessionname"; 

}
else{
       exec "tmux new-session  -s $sessionname";
}
 
Zuletzt bearbeitet:
Beispiel für ne .bashrc (andere shells dürften ähnlich sein):
Code:
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
[[ $TERM = screen ]] || tmux a || tmux
# rest der bashrc
 
Ahoi!

Danke für eure Anregungen.

Ich wollte schon direkt bei jedem ssh in die tmux session verbunden werden, d.h. ich habe das in die .login gepackt.

Mein Problem bei meinen Versuchen war, dass

Code:
tmux a || tmux && exit

einfach die Ausführung der .login beendet, mit "logout" statt "exit" geht es aber.

Meine .login nun:
Code:
if ( $TERM != "screen" ) then                                                                                                                                                    
        tmux a && logout || tmux && logout
endif

Neues Fenster erstellen ist zwar nicht mit drin, aber ich glaube, das will ich auch garnicht mehr ;)

Danke euch!
 
Zurück
Oben