GNU/Linux >> Tutoriels Linux >  >> Linux

Ssh - Comment exécuter un script immédiatement après la connexion via Ssh ?

J'ai commencé à poser cette question mais j'y ai répondu pendant que je l'avais ouverte. Je vais poster cette question, la suivre avec ma solution et la laisser ouverte à d'autres solutions potentielles.

< histoire>

Je suis un utilisateur tmux et vim. J'aime le travail vim à distance car je n'ai pas à m'inquiéter des machines de développement Ubuntu qui s'éteignent lorsqu'un film flash me donne une panique du noyau. L'exécution de tmux signifie que des fichiers ouverts m'attendent après le redémarrage et que je peux continuer là où je me suis arrêté. J'ai eu des problèmes avec vim en cours d'exécution dans une session tmux lorsque je me connecte comme suit :

ssh example.com -t 'tmux attach'

Des problèmes UTF-8 surgissent qui n'apparaissent pas lors du shelling normalement et simplement en se connectant manuellement à une session tmux.

< /histoire>

Je veux donc une méthode réutilisable pour démarrer quelque chose sur la connexion ssh, qui n'affecte aucune des autres choses que j'ai configurées dans mon .zshrc (ou votre .bashrc si vous utilisez toujours bash) qui peut être nécessaire pour mon environnement de développement, cela n'apparaît pas lorsque je travaille occasionnellement localement sur ladite machine.

Réponse acceptée :

Lorsque vous exécutez ssh example.com , le démon ssh démarre un shell de connexion pour vous, et le shell de connexion lit votre ~/.profile (ou ~/.bash_profile ou ~/.zprofile ou ~/.login en fonction de votre shell de connexion). Lorsque vous spécifiez une commande à exécuter à distance (avec ou sans -t ), le démon ssh démarre un shell ordinaire, donc votre .profile n'est pas lu. Remède :

ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'

La plupart des démons ssh sont configurés pour refuser de transmettre des variables d'environnement à l'exception de LC_* . Si le démon ssh sur example.com le permet, vous pouvez abuser d'un LC_* personnalisé variable pour démarrer tmux automatiquement - mettez ceci dans votre ~/.profile :

if [ -n "$LC_tmux_session" ] && tmux has -t "$LC_tmux_session"; then
  exec tmux attach -t "$LC_tmux_session"
elif [ -n "${LC_tmux_session+1}" ] && tmux has; then
  exec tmux attach
fi

puis connectez-vous avec LC_tmux_session= ssh example.com ou LC_tmux_session=session_name ssh example.com .

Cette réponse contient plus d'informations sur le passage des variables d'environnement via ssh.


Linux
  1. Comment exécuter des fichiers de script (.sh) dans un nouveau terminal après la connexion au serveur Ubuntu 16.04 via Ssh ?

  2. Comment exécuter un script après qu'Openvpn se soit connecté avec succès ?

  3. Comment exécuter le script après la reprise et après le déverrouillage de l'écran ?

  4. Comment exécuter un script ? ?

  5. Comment faire en sorte qu'un programme continue à s'exécuter après la déconnexion de ssh ?

Comment exécuter un script Python en PHP

Comment exécuter un script bash

Comment exécuter "find -exec {} ; ?

Comment Scp Via Une Machine Intermédiaire ??

Comment maintenir les sessions SSH à distance en cours d'exécution après la déconnexion

Comment SSH au serveur via Linux