O comando SSH não está saindo corretamente [fechado]

2

Eu escrevi um script que SSH para servidores remotos em loop e executar um comando, ele é travado depois de executar no último servidor.Aqui está o meu script de loop -

cat server | while read serName
        do
                cat cmmnds| while read line
                do
                 result='ssh -f $serName  $line'
                 echo -n ",$result" >> test.csv
        done
echo " " >> test.csv
done

Aqui está como erros no final e tem que controlar + C para sair

Cannot fork into background without a command to execute.
ssh: illegal option -- d

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
Cannot fork into background without a command to execute.
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
Cannot fork into background without a command to execute.

Qualquer pista ??

    
por Dee 17.07.2015 / 04:51

1 resposta

1

Em vez de tentar fazer isso dessa maneira usando ssh , convém usar uma ferramenta como pssh . Este U & L Q & A intitulado: Executa um comando em múltiplos anfitriões, mas só imprime o comando se for bem sucedido? .

No seu caso, você pode usar o server & arquivos de comando diretamente em pssh da seguinte forma:

$ pssh -h server -i -I < commands.txt

Exemplo

Aqui eu construí os 2 arquivos a seguir:

$ cat servers
skinner
mulder

$ cat commands.txt
date
echo 'hi'

Agora, quando eu executo:

$ pssh -O ForwardX11=no -h servers -i -I < commands.txt
[1] 03:10:03 [SUCCESS] skinner
Fri Jul 17 03:10:03 EDT 2015
hi
[2] 03:10:04 [SUCCESS] mulder
Fri Jul 17 03:06:41 EDT 2015
hi

Você pode capturar a saída acima assim:

$ .... | tee some_log_file.txt

Ou você pode retirar a -i e deixar pssh criar arquivos de log separados para cada servidor usando a opção -o <dir> .

$ pssh -O ForwardX11=no -h servers -o ~/somedir -I < commands.txt
[1] 03:13:04 [SUCCESS] skinner
[2] 03:13:04 [SUCCESS] mulder

Agora verifique os resultados:

$ ls somedir/
mulder  skinner

$ cat somedir/*
Fri Jul 17 03:09:41 EDT 2015
hi
Fri Jul 17 03:13:03 EDT 2015

Referências

por 17.07.2015 / 09:14