AJOUTÉ: Cette question est maintenant, je crois, subsumée par celle-ci: tilisation de GNU Écran complètement transparent et automatique
Voir aussi cette question connexe:
https://superuser.com/questions/147873/ssh-sessions-in-xterms-freeze-for-many-minutes-whenever-they-disconnect
Question d'origine:
Ce serait bien s'il y avait un moyen de ssh vers une machine et de se reconnecter immédiatement à une session d'écran spécifique. Tu peux le faire:
laptop> ssh server.com screen -ls
et il affichera une liste d'écrans disponibles sur server.com comme ceci [1]:
123.pts-1
456.pts-2
Et puis vous pourriez essayer de faire ceci:
laptop> ssh server.com screen -dr pts-2
mais cela échoue, en disant "Doit être connecté à un terminal." Vous devez d'abord ssh puis faire le "screen -dr pts-2" sur server.com, ce qui n'est pas bon si vous avez une connexion instable et que vous êtes souvent déconnecté. Vous voulez pouvoir reprendre avec une simple "flèche vers le haut" sur l'ordinateur portable. (Ou peut-être le rendre encore plus automatique.)
J'ai une solution irréfléchie à ce problème que je posterai comme réponse et j'espère qu'elle sera rejetée à l'oubli en faveur de la bonne façon de traiter cela.
[1] Ou mieux, si vous avez créé les sessions d'écran avec des noms comme "screen -S foo
" et "screen -S bar
", vous obtiendrez une liste plus conviviale du type:
123.foo
456.bar
et peut se reconnecter avec, par exemple, "screen -dr foo
".
Connectez-vous à server.com et faites
screen -S foo
puis ne vous déconnectez plus de cette session. Pour vous reconnecter ailleurs, faites
ssh -t server.com screen -dr foo
Pour répertorier les écrans disponibles pour vous reconnecter:
screen -ls
ou bien sûr
ssh server.com screen -ls
pour vérifier à distance les écrans disponibles de server.com.
J'utilise maintenant l'alias suivant (tcsh), basé sur la réponse de Jason ci-dessous, pour me connecter à un écran nommé s'il existe ou créer et me connecter autrement:
alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S \!:2"'
Est-ce que le -t
option faites ce que vous voulez?
-t Force l'allocation de pseudo-tty. Cela peut être utilisé pour exécuter des programmes basés sur l'écran arbi - Trary sur une machine distante, ce qui peut être très Très utile, par ex. lors de la mise en œuvre des services de menu. Plusieurs options -t Forcent l'allocation de tty, même si ssh n'a pas de tty local.
Alors:
laptop> ssh -t server.com screen -dr pts-2
Cela semble fonctionner dans mon installation.
Utilisez le -t
option à ssh pour allouer un terminal tout en exécutant directement une commande.
laptop> ssh -t server.com screen -dr pts-2
J'ai travaillé sur quelque chose de similaire mais je n'y suis pas encore parvenu, vos solutions ont résolu mon problème alors voici ma suggestion:
ssh -t server.com "screen -S foo -rd || screen -S foo"
Cela essaie juste d'ouvrir l'écran existant nommé foo et s'il n'existe pas, le crée. Je vais mettre cela dans un lanceur sur mon ordinateur portable, donc lorsque le réseau sans fil disparaît, je peux simplement ouvrir là où je me suis arrêté.
Je viens de remarquer que l'écran par défaut Shell est un peu faible, donc une amélioration qui configure un peu mieux votre environnement domestique est:
ssh -t server.com "screen -S foo -rd || screen -S foo bash -l"
Si vous aimez vous connecter à la même session, même si elle est active, détachée ou n'existe pas encore:
ssh -t user @ server screen -xR screenName
La même chose mais créez une nouvelle session si elle est déjà active sur un autre pty:
ssh -t user @ server screen -rR screenName
J'ai converti ceci pour travailler sur OS X .bash_profile avec un ajout: Si aucun 2ème paramètre n'est donné, il démarrera une session "par défaut".
function ssc() {
if [[ -z $2 ]]; then
screen="default"
else
screen=$2
fi
ssh -t $1 "screen -S $screen -dr || screen -S $screen"
}