¿Puedo enviar ssh a algún lado, ejecutar algunos comandos y luego dejarme un aviso?

Me parece necesario iniciar sesión en varios servidores, establecer variables de entorno y luego trabajar de forma interactiva.

p.ej

$ ssh anvil jla@anvil$ export V=hello jla@anvil$ export W=world jla@anvil$ echo $V $W hello world 

¿Cómo puedo combinar los primeros comandos y luego dejarme en un aviso?

Algo como:

 $ ssh anvil --on-login 'export V=hello; export W=world;' jla@anvil$ echo $V $W hello world 

Obviamente, este es un problema modelo. Lo que realmente estoy preguntando es ‘¿cómo hago ssh en una máquina diferente, ejecuto algunos comandos y luego continúo como si los hubiera manejado a mano?’

Probablemente lo más simple es:

 $ ssh -t host 'cmd1;  cmd2;  sh -i '

Si quieres establecer variables, hazlo:

 $ ssh -t host 'cmd1;  cmd2;  FOO = hola sh -i '

Tenga en cuenta que este es un hack terrible, y sería mejor que ponga los comandos iniciales deseados en un script y haga:

 $ scp setup host: ~
 $ ssh host
 host $.  preparar

También podría usar el siguiente script de espera :

 #!/usr/bin/expect -f spawn ssh $argv send "export V=hello\n" send "export W=world\n" send "echo \$V \$W\n" interact 

Resulta que esto es respondido por esta pregunta:

¿Cómo puedo ssh directamente a un directorio en particular?

a ssh:

 ssh -t anvil "export V=hello; export W=world; bash" 

seguido por:

 jla@anvil$ echo $V $W hello world 

Vale la pena señalar que ssh -t realidad se puede utilizar para conectarse a un host a través de otro host.

Por ejemplo, si desea ejecutar un comando en el yunque , pero solo se puede acceder al yunque desde la puerta de enlace del host (mediante un cortafuegos, etc.), puede hacer esto:

 ssh gateway -t 'ssh anvil -t "export V=hello; export W=world;bash -l";' 

Salir del yunque también lo desconectará de la puerta de enlace (si desea permanecer en el gatway después de salir del yunque, simplemente agregue otro bash -l antes de cerrar el comando.

Otro enfoque es ejecutar esta bestia (también me da un caparazón de color):

ssh host -t "echo 'rm /tmp/initfile; source ~/.bashrc; cd foo/; git status' > /tmp/initfile; bash --init-file /tmp/initfile"