Enquanto ssh fornece dois fluxos de saída separados (para stdout e stderr), ele alimenta apenas um fluxo de entrada (stdin). Então, você precisaria passar o conteúdo do script e o arquivo de entrada por meio de mecanismos diferentes.
Por exemplo, um através de uma variável, um via stdin:
LC_CODE=$(cat local_script.sh) ssh host 'eval "$LC_CODE"' < input
(supondo que seu cliente ssh passe a variável LC_* ( SendEnv in ssh_config ) e o servidor sshd os aceite ( AcceptEnv in sshd_config ))
Ou simplesmente passe o conteúdo do local_script.sh como o código do shell remoto supondo que o shell de login do usuário remoto seja o correto para a sintaxe desse script:
ssh host "$(cat local_script.sh)" < input
Ou concatene o código e a entrada alimentados para o stdin de ssh como:
{
echo '{'; cat local_script.sh; echo '}; exit'
cat input
} | ssh host 'bash -s some arguments'
Aqui, usando bash , porque bash cuidará da leitura da entrada, um byte de cada vez, para não ler além daquela linha }; exit , enquanto nem todas as outras camadas fazem isso.
Ou se sed no host remoto for GNU sed :
echo '#END-OF-SCRIPT' | cat local_script.sh - input |
ssh host 'set some arguments; eval "$(sed -u "/^#END-OF-SCRIPT/q")"'
(aqui tendo o código avaliado pelo shell de login do usuário remoto e assumindo que é como o Bourne)