2011-07-14 15 views
5

Parece que en this question, la respuesta fue separar las declaraciones con punto y coma. Sin embargo, eso podría volverse engorroso si nos adentramos en scripts complejos con múltiples instrucciones if y cadenas de comillas complejas. Pensaría.¿Maneras alternativas de emitir comandos múltiples en una máquina remota usando SSH?

Imagino que otra alternativa sería simplemente emitir múltiples comandos SSH uno tras otro, pero de nuevo eso sería engorroso, además no estoy configurado para la autenticación de clave pública/privada, así que esto sería pedir muchas contraseñas de veces

Lo que idealmente me gustaría es que sea muy similar a la experiencia de shell interactiva: en un punto del script se pasa a @ the_remote_server y solicita la contraseña, que se ingresa (interactivamente) y luego desde ese punto hasta que su script emita el comando "exit", todos los comandos del script se interpretarán en la máquina remota.

Por supuesto, esto no funciona:

ssh [email protected] 
    cd some/dir/on/remote/machine 
    tar -xzf my_tarball.tgz 
    cd some/other/dir/on/remote 
    cp -R some_directory somewhere_else 
exit 

¿Hay otra alternativa? Supongo que podría sacar esa parte directamente de mi script y pegarla en un script en el host remoto. Meh. Ahora estoy manteniendo dos scripts. Además, quiero un pequeño archivo de configuración para guardar los valores predeterminados y otras cosas, y tampoco quiero mantener eso en dos lugares.

¿Hay alguna otra solución?

Respuesta

9

Utilice un heredoc.

ssh [email protected] << EOF 
cd some/dir/on/remote/machine 
tar -xzf my_tarball.tgz 
cd some/other/dir/on/remote 
cp -R some_directory somewhere_else 
EOF 
+0

excepcional. ¡Gracias! –

+0

como su script heredoc se vuelve más complicado (con variables particularmente), querrá citar el delimitador heredoc: '<< 'EOF''. Luego, el heredoc se enviará literalmente a la máquina remota y su shell local no intentará interpretarlo. –

3

sintaxis Uso heredoc, como

ssh [email protected] <<EOD 
cd some/dir/on/remote/machine 
... 
EOD 

o tubo, como

echo "ls -al" | ssh [email protected] 
+0

+1 ¡gracias por la idea de la tubería también! –

Cuestiones relacionadas