Execute o script local sobre o ssh

4

o ssh silencioso é configurado do servidor A para o servidor B (e cerca de 500 outros servidores)
Eu escrevi um script no servidor A (shell e perl) que eu quero executar via ssh no servidor B (e os outros 500 servidores). Isso é possível ? Eu sou capaz de executar comandos usando o ssh silencioso, mas não sei como executar scripts inteiros.

    
por user1074593 01.08.2014 / 06:08

5 respostas

8

Se o servidor A é um sistema baseado em Unix / Linux, você pode usar:

ssh root@MachineB 'bash -s' < local_script.sh

Você não precisa copiar o script para o servidor remoto para executá-lo.

    
por 01.08.2014 / 07:34
3

Use este comando:

ssh user@host <<'my.sh'
#script to run on remote host
my.sh
    
por 01.08.2014 / 07:48
1

Como o ssh silencioso já está configurado, já está configurado como você diz, Eu scp o arquivo do arquivo e executá-lo localmente

ou seja:

while read line
do
  echo Trying to configure server [IP]: $line >> error.log
  scp my-script.sh $line:/root/scripts/ &>> error.log
  ssh root@$line 'cd /root/scripts && ./my-script.sh' &> error.log
  echo Finished working with [IP]: $line >> error.log
done <client-ips.txt

A execução do script no site do cliente é menos propensa a erros do que a análise com < < < operadores.

Algo semelhante ao script acima deve fazer a maior parte do trabalho para você (espero que todos). Além disso, ele rastreará qualquer coisa (enviando mensagens de erro) que ocorreu de modo que você saiba quais endereços IP precisa ser atendido manualmente.

    
por 01.08.2014 / 17:02
1
#!/bin/bash
# Source : http://backreference.org/2011/08/10/running-local-script-remotely-with-arguments/
# runremote.sh
# usage: runremote.sh localscript interpreter remoteuser remotehost arg1 arg2 ...
# example: runremote.sh MySQL_makeUser.sh bash pi coins.ml database user

realscript=$1
interpreter=$2
user=$3
host=$4
shift 4

declare -a args

count=0
for arg in "$@"; do
  args[count]=$(printf '%q' "$arg")
  count=$((count+1))
done

ssh $user@$host "cat | ${interpreter} /dev/stdin" "${args[@]}" < "$realscript"
# Note: you may need to add options or hardcode keys and such into the above command; example of this commented bellow
# ssh -i <path/to/key> -p <port> $user@$host "cat | ${interpreter} /dev/stdin" "${args[@]}" < "$realscript"

Acima está um script que encontrei com uma pequena pesquisa e modifiquei um pouco para mostrar um exemplo de uso e exemplo de uso de chaves para conexões, pois o OP declarou que seria executado em muitos outros servidores. Esse script também é codificado de modo que você possa passar argumentos para o script local e especificar o programa que o servidor deve usar para receber os comandos do script; isto é, você pode dizer ao seu servidor para usar perl ou python ou java ... e então dar a ele aquele script relacionado :-D A fonte que eu encontrei no script acima está codificada em seus comentários, de tal forma que a cópia / passado ainda permitirá que você encontre os autores originais;)

Rede feliz para todos vocês.

    
por 04.05.2015 / 23:16
-1

Você pode executar comandos remotos em ssh como

ssh user@serverA /path/to/your/script

    
por 01.08.2014 / 07:11

Tags