Je voudrais configurer SSH et écran de telle sorte qu'une connexion sera toujours rattachée à une session d'écran. Idéalement, cette session ne se fermerait pas mais se détacherait lorsque j'appuyer sur Cd. Comment cela peut il etre accompli? Et quels sont les autres paramètres utiles pour faciliter ma vie SSH?
la source
J'ai les éléments suivants dans mon .bash_profile sur mes serveurs distants:
Cela fait deux choses: premièrement, configure une fonction shell pour remplacer le shell et reporter la connexion ssh-agent, deuxièmement elle appelle la fonction après une pause de quelques secondes (au cas où vous ne voudriez pas que l'écran démarre).
La première
if
clause sera vraie si screen (-z "${STY}"
) n'est pas déjà en cours d'exécution est attaché à un terminal (-t 0
) et que je n'exécute pas sudo (qui parfois ne change pas$USER
).La
reattach
fonction vérifiera d'abord si ssh a été appelé avec un port ssh-agent actif (-n "${SSH_AUTH_SOCK}"
). Ensuite, il remplacera tout ce qui se trouve~/.ssh/agent-script
avec le fichier socket actuellement actif et remplacera la variable d'environnement ($SSH_AUTH_SOCK
) par la nouvelle valeur. Ensuite, le script remplacera le shell actuel par une seulescreen
session (en s'assurant qu'il n'en existe qu'une seule). Tous les arguments de lareattach
fonction sont passés à la commande (${1:+"$@"}
).La dernière partie supprime d'abord toutes les sessions mortes (
screen -wipe
), permet à l'utilisateur (moi) de savoir que l'écran va démarrer sous peu et peut à la place revenir au shell en appuyant sur Ctrl- C. Il attend ensuite 5 secondes et appelle lareattach
fonction.la source
Tout d'abord, si vous utilisez byobu, vous pouvez configurer une nouvelle session shell pour toujours démarrer automatiquement byobu (ce qui est essentiellement une belle configuration d'écran, bien que les versions plus récentes puissent utiliser tmux comme backend). Si vous ne voulez vraiment pas byobu, vous pouvez probablement configurer l'écran pour qu'il se connecte manuellement en éditant votre
.profile
ou un autre script de configuration du shell surexec screen
ifTERM != "screen"
.Si vous n'aimez pas cela, vous pouvez utiliser le
authorized_keys
fichier pour exécuter une commande spécifique pour les connexions avec une clé spécifique (et vous pouvez avoir autant de clés que vous le souhaitez). Voirman sshd
pour plus de détails. Je vous suggère de faire exécuter à la commande un script qui vérifie si l'écran est en cours d'exécution et se connecte, ou bien démarre une nouvelle session.Quant à la déconnexion sur Ctrl-D, l'écran vous permet de configurer les mappages de touches dans votre
.screenrc
. Voirman screen
pour plus de détails. Vous recherchez "bindkey".la source
Peut-être totalement hors de propos pour votre question, mais avez-vous déjà envisagé d'utiliser TMUX à la place. Il fait beaucoup de fonctionnalités que vous recherchez hors de la boîte.
Par exemple. si vous vous déconnectez d'une session SSH lorsque vous êtes sous TMUX, tout ce que vous avez à faire est de sauvegarder en arrière et d'exécuter "tmux a" pour attacher à votre session. Depuis que j'ai commencé à utiliser TMUX, j'ai oublié ce que sont les commandes nohup / disown ... si vous avez besoin d'exécuter quelque chose et de vous déconnecter - exécutez-le dans tmux et détachez. La sortie de la commande sera mise en mémoire tampon, vous pourrez donc la consulter plus tard.
pour attacher automatiquement, vous pouvez ajouter quelque chose comme ci-dessous à .bashrc:
ou encore plus facile
Il a une empreinte mémoire inférieure et une option IMHO globale bien meilleure / plus facile à utiliser.
Le raccourci méta-d est le mappage par défaut à détacher dans TMUX.
la source
screen -dAr default || screen -AS default
travaille pour moi. J'ajoute cela à mon ~ / .bashrc .Expliquant brièvement les commutateurs:
d
- Détachez l'écran s'il est toujours attaché à une autre session.A
- Adaptez les fenêtres de l'écran à la nouvelle taille du terminal.r default
- Attachez à un écran appelé par défaut.Si la première commande d'écran (la précédente
||
) échoue, la seconde est exécutée:A
- Comme expliqué ci-dessus ...S default
- Créez la nouvelle session d'écran avec le nom par défaut .la source
Je suggère d'utiliser byobu . Cet outil utilise tmux et fournit une belle barre d'outils et d'autres fonctionnalités pratiques de changement de fenêtre, des raccourcis clavier, etc.
Avec ces commandes ci-dessus, après une connexion SSH réussie, le système essaie de se connecter à une session byobu-tmux existante, sinon il créera une nouvelle session.
la source