Remote ls em várias máquinas

6

Eu quero me conectar a várias máquinas especificadas em um arquivo e executar 'ls' lá.

Foi isso que eu criei:

for machine in $(cat machines)
do
   echo "Connecting to " $machine
   ssh $machine ls -la && exit
done

Além do fato de que preciso 'cd' para um diretório diferente antes do 'ls', o loop termina após a primeira entrada no arquivo. Esta primeira entrada é minha própria máquina, se isso for importante.

O que estou perdendo?

    
por FAS 05.03.2014 / 16:45

3 respostas

9

Seu problema está aqui:

ssh $machine ls -la && exit

Seu script ssh s para a máquina remota que executa seu ls . ssh sai com sucesso, && vê isso e executa o próximo comando que é exit , então seu script sai!

Você não precisa do && exit . Quando ls terminar, a conexão será fechada e ssh será concluído. Apenas remova esse bit e você será de ouro.

    
por 05.03.2014 / 16:46
4

Você não está perdendo nada, você está adicionando algo que você não deveria. O exit realmente mata sua sessão, não está sendo executado na máquina remota:

ssh [email protected] command && other_command
|---------------------|    |------------|
        |                        |----------> A completely separate command to be
        |                                     run if the ssh is successful 
        |-----------------------------------> The ssh command

Além disso, você não precisa do cd (ou do cat ), o que você quer executar é:

while read machine;
do
  echo "Connecting to " $machine
  ssh $machine ls -la /path/to/remote/directory
done < machines
    
por 05.03.2014 / 16:50
3

exit não é executado remotamente, mas deste lado (e é desnecessário). Se você precisar executar mais de um comando (como cd , ls e possivelmente mais), basta enviar um script para ssh e executá-lo remotamente com bash . Algo como

cat <<EOF | ssh "$machine" bash
  cd "$remote_dir"
  ls -la
  exit #if you actually needed this, it would be here, but you don't
EOF
    
por 05.03.2014 / 16:52