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
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
zamiastscreen -d -R
. - Użyj prefix d lub
tmux detach-client
lubtmux 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.
screen