ssh remotehost 'command1 ; command ; command3'
Ou, se você quiser apenas executar o comando2 se o comando1 tiver sido bem-sucedido e o comando3 se o comando2 tiver êxito:
ssh remotehost 'command1 && command && command3'
Note que você precisará prestar atenção especial aos problemas de citação de shell, eles podem se tornar muito complicados quando você estiver digitando um comando em seu shell local para executar comandos em um shell remoto (eles podem ficar ruins o suficiente com um shell local). Por exemplo, considere a diferença entre os dois comandos a seguir:
ssh remotehost 'ps hu -Csshd | awk "{print \}"'
ssh remotehost 'ps hu -Csshd | awk "{print $2}"'
A primeira imprime somente os PIDs dos processos sshd. O segundo imprime a listagem ps hu
completa dos processos sshd - o $ 2 sem escape é uma string vazia, então o comando awk se torna apenas {print }
Uma terceira opção é executar o ps no host remoto e o awk localmente:
ssh remotehost ps hu -Csshd | awk '{print $2}'
Nos dois comandos acima, toda a string citada é executada no host remoto, porque esse é o argumento que você deu ao comando ssh. Neste exemplo, tudo até o | é executado remotamente (novamente porque 'ps', 'hu' e '-Csshd' são argumentos para o comando ssh, e o restante da linha é executado localmente.
Para tarefas que são mais complicadas do que você deseja rodar com um one-liner (ou quando a citação de shell se torna infernal), você pode escrever um script de shell e copiá-lo para o host remoto, e então executá-lo com ssh:
vi myscript.sh
chmod +x myscript.sh
scp myscript.sh remotehost:/usr/local/bin/
ssh remotehost myscript.sh
Você pode copiar o script para qualquer lugar, mas a) você precisa de acesso de gravação ao diretório, b) não pode estar em um sistema de arquivos montado com noexec (não é comum, mas às vezes o / tmp é montado noexec) a menos que você execute-o com "/ caminho / para / interpretador / caminho / para / script" - por exemplo /bin/bash /tmp/myscript.sh