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.
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.
Use este comando:
ssh user@host <<'my.sh'
#script to run on remote host
my.sh
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.
#!/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.
Você pode executar comandos remotos em ssh como
ssh user@serverA /path/to/your/script