2009-10-27 11 views
14

Me gustaría un comando que ssh'es en una máquina, ejecute un comando (cd o ejecute un script o su), y luego me da el shell. Al pasar un comando a ssh parece que siempre sale.ssh con el comando .... Más el shell

Algunos ejemplos de lo que estoy buscando: 'me ssh @ machine1 "./executeMyScript & & cd/developmentDirectory"' y luego me da mi caparazón de vuelta.

Las razones por las que quiero hacer esto es porque estoy usando mrxvt (tabbed x terms) que me permite definir comandos para que todas mis pestañas se ejecuten al inicio. Me gustaría tener algunas conexiones ssh a la misma máquina, pero hacer que hagan cosas diferentes después de sshing.

-Rob

¡Gracias!

Respuesta

10

Variación en las otras respuestas realmente, utilice la opción -t de ssh para forzar la asignación de pseudo-tty:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

gracias! en la primera inspección, ¡eso funciona exactamente como me gustaría! ¡Hurra por "-t"! – robarson

+0

Aunque esta pregunta fue respondida adecuadamente, si alguien está leyendo, ¿sabe cómo puedo tener la instancia de bash que empiezo con este comando abrir emacs (para que cuando cierre emacs, vuelva a mi terminal de bash) ? Diablos ... incluso algo que abra emacs sin bash sería bueno (tal que emacs no salga inmediatamente después de comenzar). – robarson

4

¿Qué tal

ssh [email protected] ./executeMyScript '&&' bash -i 

Hay que citar el && por lo que se pasará a la máquina remota en lugar de tragada por el shell local.

Cita un carácter ';' y puede cambiar su directorio de inicio, también:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

Gracias. La llamada a bash funcionó ...infosar ya que me dio un caparazón. Desafortunadamente no funciona muy bien ... los atajos de teclado simples como ctrl^a no funcionan, lo que significa que debo intentar encontrar una solución diferente. Por cierto, también imprime "bash: no hay control de trabajo en este shell". – robarson

+3

Pruebe con la opción '-t':' ssh -t me @ machine ... ' – mob

2

poner algo como esto al final de la secuencia de comandos que desea ejecutar:

bash -li 

Eso comienza Bash como un shell de inicio de sesión interactivo. No es perfecto, ya que se perderá cosas como el reenvío TERM, pero podría ser adecuado a sus necesidades.

Si no es suficiente, que acababa de hacer dos llamadas ssh separados, uno para ejecutar el script y otro para ir a mensaje.

+0

+1 para dos comandos ssh separados. KISS –

2

¿Cómo sobre el uso de la opción SendEnv en ssh_config para enviar un entorno específico opción de su máquina local a su máquina remota seguida por la comprobación de esa variable de entorno en la configuración del host remoto?

En su .ssh/especial-config-file:

remotehost: 
    SendEnv * 

Su escritura local:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

Su .bash_profile remoto:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

Es posible que necesite para comprobar algunas de estas líneas, acabo de juntar esto de las páginas man y no he probado nada de esto antes. Personalmente, no me gusta tener que modificar mi entorno local y remoto para esta solución.

0

Esto funciona para mí.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

¿Por qué funcionó para ti? Proporcione más detalles para que el OP pueda entender por qué escribió lo que hizo. – rayryeng

+1

También es una copia más o menos directa de la respuesta elegida existente, publicada hace 4 años ... – Synchro

+0

Una explicación sería agradable. –

Cuestiones relacionadas