Проблема с sudo через ssh

Я использую сценарий для выполнения сценария обновления на определенном числе серверов в моей сети. Вот первая часть, думают, релевантно.

### 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

Что это делает: Если аргументы как user1@server1 и user2@server2 даны

  • Проверьте, работает ли сервер с другим сценарием.
  • Выполните сценарий обновления. Авторизуйте через "ssh-t"

Если никакие аргументы не даны, считайте a config файл, который содержит список как:

user1@server1
user2@server2

Проблема происходит только с последним. Bash говорит

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

Что я делаю неправильно?

Примечание: ächo является предопределенной функцией, которая добавляет scriptname и текущее время к echo.

0
задан 10 June 2017 в 19:31

1 ответ

Я не эксперт, но я думаю, что проблемой был открытый входной поток.

Этот код добивается цели:

### 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
2
ответ дан 3 August 2019 в 14:44

Другие вопросы по тегам:

Похожие вопросы: