¿Cómo ejecutar scripts locales (sin shell) en un host remoto a través de SSH?

¿Cómo puedo hacer un cat someFile | ssh someHost cat someFile | ssh someHost trabajo cuando someFile no es un script bash? Quiero ejecutar remotamente un script de Perl, pero recibo un montón de errores de syntax de bash cuando pruebo el gato | command ssh.

Si desea insert el script Perl a través de la connection SSH, deberá ejecutar el intérprete Perl en el extremo remoto. Leerá el script de stdin:

 ssh remotehost perl < somescript.pl 

En el caso de Perl, incluso debería leer los interruptores de línea de command (excepto -T ) de la línea hashbang de la input.

Si desea dar arguments de línea de command al intérprete de Perl, puede simplemente agregarlos a la línea de command después de perl . Si desea dar arguments a la secuencia de commands , tendrá que decirle explícitamente al intérprete que lea la secuencia de commands de stdin (de lo contrario, tomará el primer argumento como un nombre de file para search).

Entonces, aquí -l va al intérprete, y foo y bar al guión:

 echo 'print "> $_" foreach @ARGV' | ssh remotehost perl -l - foo bar 

Tenga en count que hacer solo ssh somehost < script.sh count en el shell de inicio de session remoto que es compatible con el script. (es decir, un script Bash no funcionará si el shell remoto es otra cosa).

ssh someHost ejecutará su shell pnetworkingeterminado, que a su vez ejecutará los commands que lee de la input estándar. Como está enviando el contenido de someFile a la input estándar, lógicamente intenta ejecutar el contenido de someFile.

No nos diga qué se supone que contiene algún file. Suponiendo que se supone que su contenido se alimenta a su script de Perl, lo que debe hacer es:

 cat someFile | ssh someHost your_perl_script 

O mejor:

 ssh someHost your_perl_script < someFile 

en orderado a =>

Escriba salida local en file remoto: acaba de instalar Apache en su $ myhost. Ahora quieres probarlo.

Puede hacer eco de la cadena de testing en el file, solo que esta vez el file está en la raíz remota de htdocs:

  echo "Funciona" |  ssh user@your.host 'cat >> /usr/local/apache/htdocs/it_works.html'

Abra el file remoto con less o gato: con cat:

  ssh user@your.host "cat /usr/local/apache/htdocs/it_works.html" 

Con less:

  ssh user@your.host "less /usr/local/apache/htdocs/it_works.html" 

Grep files remotos:

Con tubería:

  ssh user@your.host "cat /usr/local/apache/htdocs/it_works.html" |  grep "funciona" 

Sólo grep remoto:

  ssh user@your.host "grep works /usr/local/apache/htdocs/it_works.html" 

Ver loggings remotos con queue:

De esta forma, puede ver el acceso al server apache en time real:

  ssh user@your.host "tail -f / etc / httpd / logfiles / access_log" 

La fuente de esta respuesta está aquí .

Espero que te haya ayudado.