È una buona idea inserire "screen -r" nel mio .bashrc?


17

Vorrei usare lo schermo per mantenere attive le sessioni ssh sul mio server. Sarebbe bello se potessi riprendere automaticamente qualsiasi sessione in esecuzione per il mio utente quando eseguo l'accesso. Il modo più semplice per farlo sarebbe aggiungere "screen -r" al mio .bashrc, e questo sembra funzionare bene. Mi chiedo solo se questo romperà qualcosa in condizioni che non ho ancora testato. Chiunque abbia esperienza qui che può dirmi se questo è quello che dovrei fare?

Risposte:


20

È necessario screen -R -dcollegarsi automaticamente a una sessione esistente se ne esiste una e, in caso contrario, creare una sessione.

Assicurati di farlo solo su shell interattive . Bash source ~/.bashrcanche per shell non interattive quando il suo processo padre è rshd o sshd (questo è menzionato nella documentazione, ma è facile da perdere). Puoi dire che una shell è interattiva perché $-contiene i.

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

Ciò non ti consentirà facilmente di eseguire diverse sessioni dello schermo in diversi terminali.

Dovrai staccarti dallo schermo, quindi uscire dalla shell principale per disconnetterti. Questo può essere risolto usando exec screeninvece di screen.

Se avvii una shell diversa da una shell di accesso, verrai messo sullo schermo, il che non è quello che vorresti la maggior parte del tempo. Almeno lo limiterei a quando stai eseguendo direttamente in una sessione ssh interattiva, con qualcosa di simile al seguente nel tuo ~/.bash_profile:

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

Fare attenzione quando si eseguono operazioni complesse con .bashrcun errore che causa l'uscita della shell renderebbe difficile l'accesso.


Quello che consiglio è di non modificare i file di inizializzazione della shell sul server, ma di eseguire lo schermo in modo esplicito dal client, come in

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

(Probabilmente creeresti un alias di shell o un collegamento all'ambiente desktop sul client.) In questo modo puoi facilmente scegliere di non eseguire lo schermo, specificare un nome di sessione alternativo e così via.


Perfetto. Dovrebbe essere nella pagina man.
marcusw,

Non è meglio che ssh funzioni screen -D -Ro addirittura screen -D -RR?
Niutech,

2

Gli script di avvio del server X spesso avviano una nuova shell, ad esempio se si accede utilizzando gdm utilizzando la "Sessione definita dall'utente".

Penso che tutto ciò che non esce potrebbe causare il blocco dell'avvio di X. Ciò includerebbe screen -r.


Gli script di avvio del server X non verranno eseguiti .bashrc. Ma ci sono altre circostanze in cui questo sarebbe un problema, ad esempio durante l'esecuzione ssh host.example.com somecommand(stranamente, allora bash viene eseguito .bashrc).
Gilles 'SO- smetti di essere malvagio' il

È su alcune distro se si sceglie "Sessione definita dall'utente". Su Ubuntu, genera esplicitamente .profile, altri chiamano .xsession dall'interno di una shell di login, che in genere significherebbe .bash_profile, e la maggior parte degli utenti sorgente .bashrc dall'interno del proprio .bash_profile.
Mikel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.