TL; DR
Las cosas solo se vuelven un poco más complicadas cuando tienes un servidor bastión que debe usarse.
Puede pasar sshcomo el comando que sshdesee:
cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Cuidado con los pseudo terminales
Tenga en cuenta que el punto de importancia clave aquí es que ssh, como la mayoría de las herramientas, solo trata stdouty stdincorrige por defecto.
Sin embargo, cuando comience a ver la opción Me gusta Disable pseudo-terminal allocation.y Force pseudo-terminal allocation.es posible que deba hacer un poco de prueba y error. Pero, como regla general , no desea alterar el ttycomportamiento a menos que esté tratando de arreglar basura ilegible / binaria en un emulador de terminal (lo que un humano escribe).
Por ejemplo, tiendo a usarlo -Atpara que el agente ssh de mi estación de trabajo se reenvíe, y para que ejecutar tmux de forma remota no interrumpa el binario (así ssh -At bastion.internal tmux -L bruno attach). Y, para Docker también (como así sudo docker exec -it jenkins bash).
Sin embargo, esas dos -tbanderas causan algunos daños en los datos difíciles de rastrear cuando intento hacer algo como esto:
# copy /etc/init from jenkins to /tmp/init in testjenkins running as a container
ssh -A bastion.internal \
ssh -A jenkins.internal \
sudo tar cf - -C /etc init | \
sudo docker exec -i testjenkins \
bash -c 'tar xvf - -C /tmp'
# note trailing slashes to make this oneliner more readable.