Automatycznie uruchamiam ekran gnu, gdy łączę się z nim na moim własnym serwerze. Kiedy skończę, muszę się odłączyć. Następnie wyjdź, aby zakończyć ssh. Oznacza to, że kiedy w pewnym momencie ponownie połączę się z serwerem, mogę kontynuować od miejsca, w którym skończyłem.

Czy mogę utworzyć alias (na przykład), który (z poziomu ekranu) odłączy i upuści ssh?

Komentarze

  • Jak automatycznie uruchomić screen

Odpowiedź

Uruchamianie screen podczas logowania na zdalnym hoście (wykonywane na komputerze lokalnym):

ssh -t user@host screen 

Na ekranie sesja na zdalnym hoście, w celu odłączenia i wylogowania (co spowoduje zakończenie sesji SSH, chyba że używasz trwałego połączenia przy użyciu gniazda sterującego (tj. używając ustawienia ControlMaster z ControlPersist w ~/.ssh/config)):

screen -d 

Później, aby się zalogować i dołącz ponownie:

ssh -t user@host screen -r 

Pamiętaj, że musisz użyć -t z ssh, wymuszając alokację pseudo-terminala, aby rozpocząć screen w ten sposób.

Alias na zdalnym hoście to f lub screen -d, może detach="screen -d" lub coś podobnego.

Na lokalnym hoście możesz mieć sekcję w swoim ~/.ssh/config plik z informacją

Host *-screen RequestTTY force RemoteCommand screen -d -R Host myhost myhost-screen HostName myhost.somedomain.example.com User myname 

Następnie, kiedy używasz

ssh myhost-screen 

a screen sesja zostanie utworzona (lub ponownie podłączona) na określonym hoście, natomiast

ssh myhost 

nie użyje screen.

Uwaga: RemoteCommand został dodany w OpenSSH 7.6 (2017 -10-03).


Dla tmux:

  • Użyj tmux new-session -A -s "%n" w ~/.ssh/config zamiast screen -d -R.
  • Użyj prefix d lub tmux detach-client lub tmux detach do odłączenia.

Komentarze

  • Świetnie, dzięki. W domu sprawdzi się świetnie. Nie wiedziałem o ' Wymuś alokację pseudo-tty '. Przetestowałem to i działa.

Odpowiedz

Kiedy wykonujesz polecenie na ekranie, aby przywołać lub utworzyć ekran , Po dodasz zabicie swojej powłoki nadrzędnej, więc zlikwidujesz połączenie SSH.

przykład zabicia mojego procesu nadrzędnego, jeśli nadrzędnym jest bash

kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk "{print $2} " ) 

Komentarze

  • Thx. Jeśli ssh wchodzę z miejsca, w którym nie mogę określić aplikacji do uruchomienia (np. Online ssh app.shellngn.com ) i zmodyfikuję wiersz kodu, aby poszukaj sesji ssh, to zadziała.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *