Você está enfrentando um problema do tipo "ordem de operações", eu acho. O < é processado antes dos comandos serem executados, então você está executando algo semelhante (embora não idêntico a)
varname=$varname test2.sh | ssh [email protected] bash
que executa o test2.sh localmente e envia essa saída para bash no servidor remoto. É por isso que você vê a saída de test2.sh , mas recebe um erro quando tenta executar essa saída como um comando.
Se você está executando um script que é executável, você não precisa do bash , então você pode fazer
ssh [email protected] "varname=$varname ./test2.sh"
assumindo que test2.sh esteja disponível no servidor remoto.
Se você não tiver test2.sh no servidor remoto e ainda quiser executá-lo, poderá fazer assim:
ssh [email protected] varname="$varname" bash < test2.sh
que redirecionará a fonte do script, mas processará a variável no contexto do bash executável