Como executar um script de shell local em um servidor SSH remoto

Conteúdo

Bash Shell

O problema com a execução de comandos via SSH é que, em geral, você precisa escrevê-los você mesmo ou fazer upload de um arquivo de script. Apesar disto, com um pouco de conhecimento bash, você pode passar scripts inteiros via SSH sem ter o .sh arquivo na máquina remota.

A resposta: passar o script por std.input

O comando SSH tem um modo onde você pode executar qualquer comando em um servidor remoto. Para executar vários comandos, você precisará usar o seguinte truque:

usuário ssh @ remotehost 'bash -s' < script.sh

a bash -s comando significa “executar os seguintes comandos em uma nova sessão de bash”. a -s O sinalizador faz com que seja lido a partir da entrada padrão, e a < script.sh bit irá ler um arquivo de script local para a entrada padrão.

o arquivo é lido inteiramente localmente e tudo é enviado para o servidor remoto sem carregar nada. isso exige que você coloque todos os comandos em um arquivo de script separado.

Executando muitos comandos remotos dentro de um script

E, em vez de, você quer executar uma parte de um script shell em outro servidor, mas não tudo, você pode incluir blocos aninhados como o seguinte em seu script:

usuário ssh @ remotehost 'bash -s' <<'ENDSSH'
  # The following commands run on the remote host
  echo "teste"
  cd /home/
  pwd
ENDSSH

Isso funciona porque bash -s espere qualquer tipo de entrada padrão. a <<'ENDSSH' A política cria uma estrutura “aqui-documento”, simplesmente passando todos os personagens entre ele eo término “ENDSSH” para a entrada padrão e, por isso, para host remoto via SSH.

Fazer desta forma significa que você pode manter tudo em um arquivo de script, em vez de criar um novo para executar remotamente.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.