scp com sshpass - diretório e arquivo remotos com curingas

0

Eu tenho uma lista com 950 VMs do MongoDB

Eu desejo coletar todos os mongodb.log. O caminho para o arquivo de log depende do nome do banco de dados.

for i in $(cat /tmp/mongonodes.txt) ; do sshpass -p34dDgdWger@rg4fll434ef scp root@$i:/data/*replicaset/*replicaset*/mongodb.log /tmp/$i-mongodb.log; done

O comando acima não funciona. Eu não posso assinar a citação do root@$i:/data/*replicaset/*replicaset*/mongodb.log por causa da variável hostname.

Chaves SSH não são uma opção.

    
por Ivanov 02.12.2015 / 15:10

1 resposta

2

Escape do SSH:

  • Considere mover dados por SSH, escapando de * usando \ ou "" (cotações). Você não precisa escapar da variável, apenas o host scp: "path \ *" por exemplo. Você pode precisar escapar duas vezes.

Exemplo, usando \* :

# On server (created a test log to replicate your scenario):
mkdir -p /data/TEST1replicasetTEST2/TEST3replicasetTEST4
touch /data/TEST1replicasetTEST2/TEST3replicasetTEST4/mongodb.log

# On client (I already have ssh keys, but sshpass will work all the same):
for i in $(cat /tmp/mongonodes.txt)
do 
    scp cmihai@$i:/data/\*replicaset\*/\*replicaset\*/mongodb.log \ 
       /tmp/$i-mongodb.log
done

Resultado:

mongodb.log                                   100%    0     0.0KB/s   00:00

$ ls /tmp/*mongo*
/tmp/192.168.136.148-mongodb.log  /tmp/mongonodes.txt

Curto prazo:

  • Configure SSH keys e distribua-os para seus servidores (ex: ssh- copy-id )

Médio prazo:

  • Considere o uso de software de gerenciamento de configuração, como Ansible ou Chef

Longo prazo:

  • Veja um registro centralizado (como syslog )
  • Coletores de registros distribuídos, como Flume

Referência:

PS: não cole sua senha aqui: -).

    
por 02.12.2015 / 15:35