executa o comando do arquivo txt

0

Eu tenho arquivo e neste arquivo eu tenho essas linhas:

ssh [email protected]
ssh [email protected]
etc....

E eu tenho o script que eu gosto de ir em cada servidor e executar o comando ls em cada um dos servidores que estão nesse arquivo. O que eu fiz por agora é:

while read line;
do
$line
done < $1

e funciona, mas para a primeira linha, depois disso, retorna um

Pseudo-terminal will not be allocated because stdin is not a terminal. error.

Então eu sei que estou sentindo falta de algo, mas estou um pouco perdido aqui.

    
por user3523605 17.08.2014 / 20:52

2 respostas

1

Você está executando o comando ssh [email protected] , que lê os comandos da entrada padrão e os executa em server1.com . A entrada padrão está conectada ao seu arquivo de entrada, portanto, em server1.com , você está executando o comando ssh [email protected] .

Se você quiser executar o comando ls , você precisará trabalhar ls em seu código de alguma forma. Existem duas opções sãs:

  • Se você deseja executar comandos arbitrários, coloque todos os comandos em seu arquivo de entrada:

    ssh [email protected] ls
    ssh [email protected] ls
    

    Em seguida, seu arquivo de entrada é um script de shell, apenas execute-o com sh myscript ou torne-o executável e coloque #!/bin/sh no topo.

  • Se você deseja executar o mesmo comando em várias máquinas, faça com que seu arquivo de entrada contenha apenas os nomes das máquinas, ou seja,

    [email protected]
    [email protected]
    

    Em seguida, leia os nomes das máquinas e execute o comando em cada um deles:

    while read target comment; do
      ssh "$target" ls </dev/null
    done <"$1"
    

    O redirecionamento de /dev/null é para o caso de o comando remoto tentar ler a entrada padrão, para evitar a leitura do arquivo com a lista de nomes de máquinas. O arquivo de lista pode conter outras palavras em cada linha após o nome do servidor; eles serão colocados na variável comment . Adquira o hábito de putting aspas duplas em torno de substituições de variáveis .

    Você pode ser mais bem servido por frameworks para executar o mesmo comando em várias máquinas .

por 18.08.2014 / 02:39
2

Adicione a opção -t para o comando ssh no seu arquivo:

ssh -t [email protected]
ssh -t [email protected]
etc....

De man ssh :

-t      Force pseudo-tty allocation.  This can be used to execute arbi‐
        trary screen-based programs on a remote machine, which can be
        very useful, e.g. when implementing menu services.  Multiple -t
        options force tty allocation, even if ssh has no local tty.

Se o erro ainda ocorrer, adicionando outra opção -t , algo como:

ssh -t -t [email protected]
    
por 17.08.2014 / 21:05

Tags