Posso fazer ssh e fazer loop e tocar arquivos em um único disparo?

3
for account in ${accounts}
do
        'ssh -q id@server "touch EVENTS_${account}_${date}.log"'
done

Em vez de fazer ssh tantas vezes, posso apenas fazer o ssh e executar o loop for e tocar os arquivos?

    
por manatwork 27.02.2012 / 16:09

3 respostas

3

ssh permite que você execute vários comandos. Simplesmente separe cada comando com um ponto e vírgula.

command=": "
for account in ${accounts}
do
        command=$command"; touch EVENTS_${account}_${date}.log"
done
ssh -q id@server "$command"

Todo o ":" diz "prossiga para o próximo comando". É assim que você não está iniciando seu comando com um ponto-e-vírgula.

Além disso, você não precisa de backticks em torno desse comando.

    
por 27.02.2012 / 16:33
0

Execute o loop na máquina remota.

ssh -q id@server "for account in ${accounts}; do touch EVENTS_\${account}_${date}.log; done"

Observe que suponho que $accounts e $date não contenham nenhum caractere especial de shell ( "$'()&;<>[\]'{|}~ ). Em paricular, $accounts será interpolado no shell remoto então interpretado lá. Se você precisa proteger caracteres especiais, precisa ser mais cuidadoso com as citações:

q=\'\\'\'  # '\'' effectively quotes a single quote inside single quotes
ssh -q id@server 'for account in '\'"${accounts//\'/$q}"\''; do touch "EVENTS_${account}_${date}.log"; done'

Como alternativa, monte o sistema de arquivos remoto com sshfs e trabalhe nele como faria localmente.

mkdir mnt
sshfs id@server mnt
for account in ${accounts}; do touch "mnt/EVENTS_\${account}_${date}.log"; done
    
por 28.02.2012 / 00:32
0

O cluster ssh parece ser a ferramenta perfeita para o que você está tentando fazer.

ClusterSSH is a tool for making the same change on multiple servers at the same time. The 'cssh' command opens an administration console and an xterm to all specified hosts. Any text typed into the administration console is replicated to all windows. All windows may also be typed into directly.

This tool is intended for (but not limited to) cluster administration where the same configuration or commands must be run on each node within the cluster. Performing these commands all at once via this tool ensures all nodes are kept in sync.

    
por 28.02.2012 / 10:58