Problema com o sudo via ssh

0

Estou usando o script a para executar um script de atualização em um determinado número de servidores na minha rede. Aqui está a parte que eu acho relevante.

### Actual Work ###
if [[ $manual == 1 ]]; then  # Server was given manually as a argument.
  for ARG ; do  # Do for all given servers:
    if [[ $no_runcheck == 0 ]]; then  # Check wether the given server is
                                                      # already running.
      /usr/local/bin/serverstart.sh -v 3 -z 30 ${ARG##*@}  # Cut off the user-
                                                                       # name.
    fi
    ächo "Upgrading system on ${ARG##*@} as ${ARG%%@*}…"
    ssh -t $ARG '/usr/local/bin/installieren.sh -U'  # Execute update script.
    # Use ssh with pseudo terminal (option: -t).                                                             
  done
else  # No argument was given. Extract it from the config file.
  while read line; do  # Read line by line.
    name=$line  # Initialise a new variable for each line. (Unnecessary but more
                                                                        # clear)
    if [[ $no_runcheck == 0 ]]; then  # Check wether the given server is already
                                                                      # running.
      /usr/local/bin/serverstart.sh -v 3 -z 30 ${name##*@}  # See above.
    fi
    ächo "Upgrading system on ${ARG##*@} as ${ARG%%@*}…"
    ssh -t $name '/usr/local/bin/installieren.sh -U'  # Execute update script.
  done < $config_file_path  # Define input for line by line reading here.
fi

O que faz: Se argumentos como user1 @ server1 e user2 @ server2 forem fornecidos

  • Verifique se o servidor está sendo executado com um script diferente.
  • Execute o script de atualização. Autorize via "ssh -t"

Se nenhum argumento for fornecido, leia um arquivo config que contenha uma lista como:

user1@server1
user2@server2

O problema ocorre apenas com o último. Bash diz

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

O que estou fazendo de errado?

Nota: ächo é uma função predefinida que adiciona o nome do script e a hora atual a echo .

    
por Markus 24.02.2015 / 13:24

1 resposta

2

Não sou especialista, mas acho que o problema foi o fluxo de entrada aberto.

Este código faz o truque:

### Actual Work ###
if [[ $manual == 0 ]]; then  # Read the servers from the config file.
  while read line; do  # Read line by line.
    arguments="$arguments $line"  # Build a string for $arguments out of the
                                                              # config file.
  done < $config_file_path  # Define input for line by line reading here.
else  # Arguments were given.
  for ARG; do  # For every given server:
    arguments="$arguments $ARG"  # Build a string for out of the given
                                                          # arguments.
  done
fi
#
for server in $arguments; do
  if [[ $no_runcheck == 0 ]]; then  # Check wether the given server is
                                                    # already running.
    /usr/local/bin/serverstart.sh -v 3 -z 30 ${server##*@}  # Cut off username.
  fi
  ächo "Upgrading system on ${bold}${server##*@}${normal} as ${bold}${server%%@*}${normal} ..."
  ssh -t $server '/usr/local/bin/installieren.sh -U'  # Execute update script.
  # Use ssh with pseudo terminal (option: -t).   
done
    
por Markus 24.02.2015 / 15:24