2011-04-14 10 views
15

decir que he almacenado el siguiente script Bash en el archivo foo.sh:Ejecutar script de Bash almacenada en un archivo a través de SSH

#!/bin/bash 
echo foo 

Sin tener que scp el archivo, ¿cómo podría ejecutar el script almacenado en foo.sh en una máquina remota?

He intentado lo siguiente (con algunas variaciones) o ningún éxito:

$ ssh [email protected] eval `cat foo.sh` 

eval `cat foo.sh` parece expandirse a eval #!/bin/bash echo foo aquí

+0

posible duplicado de [cómo usar ssh para ejecutar secuencias de comandos shell en una máquina remota? ] (http://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine) – aioobe

+0

Por supuesto, querrás configurar SSH para que no requiere una contraseña: http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html –

+0

Algunas de las respuestas a esta pregunta me han dado diabetes. – Zenexer

Respuesta

25
ssh [email protected] 'bash -s' < local_script.sh 

Lo obtuve de ese hilo: How to use SSH to run a shell script on a remote machine?

+0

¿Y cómo puedo pasar argumentos a esa secuencia de comandos? – Agostino

+0

@Agostino: si necesita llamar a local_script.sh con algunos argumentos, simplemente pase el nombre de un script que llame a local_script.sh con los argumentos necesarios, en lugar de llamar local_script.sh directamente :) –

+0

Me gustaría tenerlo como un trazador de líneas. ¿Podría hacer un pequeño ejemplo de código? – Agostino

1

cat foo.sh | ssh -T [email protected] hará el truco. La opción -T suprime una advertencia que de otro modo recibiría porque está canalizando la entrada de un archivo.

+0

uso inútil del gato –

+0

Escucha escuchar sobre el uso inútil del gato. ssh root @ remote

1
cat foo.sh | ssh HOSTNAME 

Ahora probado, sin embargo: ¡manipúlelo con cuidado! :)
(guión eliminado (ver comentarios) y casi todo :))

+0

¿Por qué 'cat foo.sh -'? Eso se bloqueará, esperando a que el usuario presione 'ctrl-D' –

+0

Bueno, estoy sin ambiente comprobable. Sin el tablero? Lo corregí. –

+0

No necesita el guión, 'cat' sin argumentos leídos de la entrada estándar. Pero no necesitas 'cat' en absoluto, y tampoco necesitas el archivo' foo.sh'. Solo ejecuta 'sh'. – Idelic

3

En respuesta aceptada veo:

me gustaría tenerlo como un trazador de líneas. ¿Podría hacer un pequeño ejemplo de código?

Eso debería ser que:

ssh [email protected] 'bash -s -- uno' < local_script.sh 

o mejor, con un documento de aquí en

ssh [email protected] 'bash -s -- uno' <<\EOF 
> date 
> echo $1 
> EOF 
jue sep 18 13:01:25 CEST 2014 
uno 
Cuestiones relacionadas