Czy dobrym pomysłem jest umieszczenie „screen -r” w moim .bashrc?

17

Chciałbym użyć screena, aby utrzymać sesje ssh na moim serwerze. Byłoby miło, gdybym mógł automatycznie wznowić dowolną uruchomioną sesję dla mojego użytkownika po zalogowaniu. Prostym sposobem na to byłoby dodanie „screen -r” do mojego .bashrc, i wydaje się, że działa dobrze. Zastanawiam się tylko, czy to coś zepsuje w warunkach, których jeszcze nie testowałem. Ktoś z doświadczeniem tutaj, kto może mi powiedzieć, czy to jest to, co powinienem zrobić?

marcusw
źródło

Odpowiedzi:

20

Musisz screen -R -dzarówno automatycznie dołączyć do istniejącej sesji, jeśli taka istnieje, i utworzyć sesję w inny sposób.

Upewnij się, że robisz to tylko na interaktywnych powłokach . Źródła Bash ~/.bashrcnawet dla nieinteraktywnych powłok, gdy jego proces nadrzędny to rshd lub sshd (jest to wspomniane w dokumentacji, ale łatwo go przeoczyć). Możesz powiedzieć, że powłoka jest interaktywna, ponieważ $-zawiera i.

case $- in
  *i*) screen -Rd;;
esac

Nie pozwoli to łatwo uruchamiać różnych sesji ekranowych w różnych terminalach.

Musisz się odłączyć od ekranu, a następnie wyjść z powłoki nadrzędnej, aby się wylogować. Można to rozwiązać za pomocą exec screenzamiast screen.

Jeśli uruchomisz powłokę inną niż powłoka logowania, zostaniesz wyświetlony na ekranie, co nie jest tym, czego chciałbyś przez większość czasu. Ograniczę to przynajmniej do sytuacji, gdy prowadzisz bezpośrednio w interaktywnej sesji ssh, z czymś w rodzaju ~/.bash_profile:

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

Zachowaj ostrożność, gdy wykonujesz skomplikowane czynności, .bashrcponieważ błąd, który powoduje wyjście powłoki, utrudnia zalogowanie się.


Co mogę polecić to nie modyfikować pliki inicjujące powłoki na serwerze, ale zamiast ekranu uruchamiania wyraźnie od klienta, jak w

ssh -t host.example.com screen -R -d

(Prawdopodobnie utworzyłbyś alias powłoki lub skrót środowiska pulpitu na kliencie.) W ten sposób możesz łatwo zrezygnować z uruchamiania ekranu, podać alternatywną nazwę sesji i tak dalej.

Gilles „SO- przestań być zły”
źródło
Doskonały. Powinien być na stronie podręcznika.
marcusw
Czy nie jest lepsze uruchamianie ssh, screen -D -Ra nawet screen -D -RR?
niutech
2

Skrypty uruchamiania X serwera często uruchamiają nową powłokę, np. Jeśli logujesz się przy użyciu gdm przy użyciu „sesji zdefiniowanej przez użytkownika”.

Myślę, że wszystko, co nie wychodzi, może spowodować zawieszenie się twojego X-a. To by obejmowało screen -r.

Mikel
źródło
Skrypty uruchamiania X serwera nie będą działać .bashrc. Ale są inne okoliczności, w których może to stanowić problem, na przykład podczas uruchamiania ssh host.example.com somecommand(dziwnie, wtedy bash się uruchamia .bashrc).
Gilles „SO- przestań być zły”
W niektórych dystrybucjach wybierzesz „Sesję zdefiniowaną przez użytkownika”. W systemie Ubuntu jawnie pobiera plik .profile, inni wywołują plik .xsession z poziomu powłoki logowania, co zwykle oznaczałoby plik .bash_profile, a większość użytkowników pobiera plik .bashrc z wnętrza pliku .bash_profile.
Mikel,