Chciałbym skonfigurować SSH i ekran tak, aby login zawsze łączył się ponownie z sesją ekranową. Idealnie byłoby, gdyby ta sesja nie została zakończona, ale odłączyła się po naciśnięciu Cd. Jak można to osiągnąć? A jakie inne przydatne ustawienia ułatwiają moje życie SSH?
ssh
gnu-screen
Tobias Kienzler
źródło
źródło
Na moim zdalnym serwerze mam następujące pliki .bash_profile:
Robi to dwie rzeczy: po pierwsze, ustawia funkcję powłoki w celu zastąpienia powłoki i przeniesienia połączenia ssh-agent, po drugie wywołuje tę funkcję po pauzie na kilka sekund (na wypadek, gdyby ekran nie chciał się uruchomić).
Pierwsza
if
klauzula będzie prawdziwa, jeśli jeszcze nie uruchomiono screen (-z "${STY}"
) podłączonego do terminalu (-t 0
) i nie uruchamiam sudo (co czasem się nie zmienia$USER
).reattach
Funkcja będzie najpierw sprawdzić, czy ssh został wywołany z portu aktywnego ssh-agent (-n "${SSH_AUTH_SOCK}"
). Następnie zastąpi wszystko, co jest w~/.ssh/agent-script
aktualnie aktywnym pliku gniazda i zastąpi zmienną środowiskową ($SSH_AUTH_SOCK
) nową wartością. Następnie skrypt zastąpi bieżącą powłokę jednąscreen
sesją (upewniając się, że tylko jedna powinna istnieć). Wszelkie argumentyreattach
funkcji są przekazywane do komendy (${1:+"$@"}
).Ostatnia część najpierw usuwa martwe sesje (
screen -wipe
), informuje użytkownika (mnie), że ekran wkrótce się uruchomi i zamiast tego może powrócić do powłoki, naciskając Ctrl- C. Następnie czeka przez 5 sekund i wywołujereattach
funkcję.źródło
Po pierwsze, jeśli używasz byobu, możesz skonfigurować nową sesję powłoki tak, aby zawsze automatycznie uruchamiała byobu (co jest zasadniczo ładną konfiguracją ekranu, chociaż nowsze wersje mogą używać tmux jako backendu). Jeśli naprawdę nie chcesz byobu, prawdopodobnie możesz ustawić ekran, aby łączył się ręcznie, edytując swój
.profile
lub inny skrypt konfiguracyjny powłoki,exec screen
jeśliTERM != "screen"
.Jeśli ci się to nie podoba, możesz użyć
authorized_keys
pliku, aby uruchomić określone polecenie dla połączeń z określonym kluczem (i możesz mieć tyle kluczy, ile chcesz). Zobaczman sshd
szczegóły. Sugeruję, aby polecenie uruchomiło skrypt, który sprawdza, czy ekran jest uruchomiony i łączy się, w przeciwnym razie rozpocznie nową sesję.Jeśli chodzi o rozłączanie na Ctrl-D, ekran pozwala skonfigurować mapowania klawiszy w twoim
.screenrc
. Zobaczman screen
szczegóły. Szukasz „bindkey”.źródło
Być może zupełnie nie ma znaczenia dla twojego pytania, ale czy kiedykolwiek zastanawiałeś się nad użyciem TMUX. Zapewnia wiele funkcji, których szukasz od razu po wyjęciu z pudełka.
Na przykład. jeśli rozłączysz się z sesją SSH, gdy jesteś pod TMUX, wszystko, co musisz zrobić, to ssh back i uruchomić „tmux a”, aby dołączyć do sesji. Odkąd zacząłem używać TMUX, zapomniałem, jakie są polecenia nohup / disown ... jeśli chcesz coś uruchomić i wylogować się - uruchom to w Tmuxie i odłącz. Dane wyjściowe polecenia będą buforowane, aby można było je później przejrzeć.
aby automatycznie dołączyć, możesz dodać coś takiego jak poniżej .bashrc:
lub nawet łatwiej
Ma mniejszą pamięć i ogólnie lepszą / łatwiejszą w użyciu opcję IMHO.
Skrót meta-d jest domyślnym odwzorowaniem do odłączenia w TMUX.
źródło
screen -dAr default || screen -AS default
pracuje dla mnie. Dodaję to do mojego ~ / .bashrc .Krótkie wyjaśnienie przełączników:
d
- Odłącz ekran, jeśli jest nadal podłączony, z innej sesji.A
- Dostosuj okna na ekranie do nowego rozmiaru terminala.r default
- Dołącz do ekranu o nazwie default.Jeśli pierwsze polecenie ekranowe (poprzednie
||
) nie powiedzie się, uruchomione zostanie drugie:A
- Jak wyjaśniono powyżej ...S default
- Utwórz nową sesję ekranu z domyślną nazwą .źródło
Sugeruję użycie byobu . To narzędzie wykorzystuje tmux i zapewnia ładny pasek narzędzi oraz inne wygodne opcje przełączania okien, skróty klawiszowe itp.
Za pomocą powyższych poleceń po udanym zalogowaniu SSH system spróbuje dołączyć do istniejącej sesji byobu-tmux, jeśli nie, utworzy nową sesję.
źródło