GNU/Linux >> Tutoriales Linux >  >> Linux

Ssh:¿cómo ejecutar un script inmediatamente después de conectarse a través de Ssh?

Comencé a hacer esta pregunta, pero la respondí mientras la tenía abierta. Voy a publicar esta pregunta, continuar con mi solución y dejarla abierta a otras posibles soluciones.

< trasfondo>

Soy usuario de tmux y vim. Me gusta el trabajo remoto de vim, ya que no tengo que preocuparme de que las máquinas de desarrollo de Ubuntu se desconecten cuando una película flash me da pánico en el kernel. Ejecutar tmux significa que los archivos abiertos me esperan después de reiniciar y puedo continuar desde donde lo dejé. He tenido problemas con la ejecución de vim en una sesión de tmux cuando me conecto así:

ssh example.com -t 'tmux attach'

Surgen problemas de UTF-8 que no aparecen cuando se ejecuta normalmente y simplemente se adjunta a una sesión de tmux manualmente.

< /trasfondo>

Entonces, quiero un método reutilizable para iniciar algo en el inicio de sesión ssh, que no afecte ninguna de las otras cosas que configuré en mi .zshrc (o su .bashrc si todavía usa bash) que puede ser necesario para mi entorno de desarrollo, eso no aparece cuando ocasionalmente estoy trabajando localmente en dicha máquina.

Respuesta aceptada:

Cuando ejecuta ssh example.com , el demonio ssh inicia un shell de inicio de sesión para usted, y el shell de inicio de sesión lee su ~/.profile (o ~/.bash_profile o ~/.zprofile o ~/.login dependiendo de su shell de inicio de sesión). Cuando especifica un comando para ejecutar de forma remota (con o sin -t ), el demonio ssh inicia un shell ordinario, por lo que su .profile no se lee. Remedio:

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

La mayoría de los demonios ssh están configurados para rechazar la transmisión de variables de entorno excepto LC_* . Si el demonio ssh en example.com lo permite, puede abusar de un LC_* personalizado variable para iniciar tmux automáticamente:pon esto en tu ~/.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

luego inicie sesión con LC_tmux_session= ssh example.com o LC_tmux_session=session_name ssh example.com .

Esta respuesta tiene más información sobre cómo pasar variables de entorno a través de ssh.


Linux
  1. ¿Cómo ejecutar “find -exec {};?

  2. ¿Cómo ejecutar archivos de script (.sh) en una nueva terminal después de conectarse al servidor Ubuntu 16.04 a través de Ssh?

  3. ¿Cómo ejecutar un script después de que Openvpn se haya conectado correctamente?

  4. ¿Cómo ejecutar el script después de reanudar y después de desbloquear la pantalla?

  5. ¿Cómo hacer que un programa continúe ejecutándose después de cerrar la sesión de ssh?

Cómo ejecutar un script de Python en PHP

Cómo ejecutar un script Bash

¿Cómo Scp a través de una máquina intermedia?

¿Cómo ejecutar un script?

Cómo mantener las sesiones SSH remotas en ejecución después de la desconexión

Cómo SSH al servidor a través de Linux