Shell Script останавливается после подключения к внешнему серверу - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь автоматизировать развертывание на сервере AWS в качестве классного проекта для моего курса по программированию. Я использую ShellScript для автоматизации различных процессов, но при подключении к серверу AWS E2 Ubuntu. При подключении к серверу он не будет выполнять никакие другие команды оболочки, пока я не закрою соединение. Есть ли способ заставить его продолжать посылать команды во время соединения?

read -p "Enter Key Name: " KEYNAME

read -p "Enter Server IP With Dashes: " IPWITHD

chmod 400 $KEYNAME.pem

ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com

ВСЕ, ЧТО ЗДЕСЬ И НИЖЕ НЕ БУДУТ РАБОТАТЬ, Пока СЕРВЕР НЕ ОТКЛЮЧЕН

1 Ответ

0 голосов
/ 27 октября 2018

Пара основных моментов:

Сценарий оболочки - это последовательный набор команд, которые должна выполнить оболочка.Он запускает программу, ожидает ее завершения и затем запускает следующую.

Программа ssh подключается к серверу и сообщает ему, что делать.Когда он выходит, вы больше не подключены к серверу.

Инструкции, которые вы вводите после ssh, будут выполняться только при выходе из ssh.Затем эти команды будут выполняться на вашем локальном компьютере, а не на сервере, на котором вы ssh ed.

Так что вместо этого вы хотите запустить ssh и попросить его выполнить ряд шагов насервер, а затем выйдите.

Посмотрите на man ssh.В нем говорится:

ssh destination [команда]

Если указана команда, она выполняется на удаленном хосте вместо оболочки входа

Таким образом, для запуска такой команды, как echo hi, вы используете ssh следующим образом:

ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com "echo hi"

Или, для более длинных команд, используйте heredoc bash:

ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com <<EOF
  echo "this will execute on the server"
  echo "so will this"
  cat /etc/os-release
EOF

Или поместите всеэти команды в отдельном скрипте и передайте его в ssh:

cat commands-to-execute-remotely.sh | ssh -i "$KEYNAME.pem" ubuntu@ec2-$IPWITHD.us-east-2.compute.amazonaws.com

Определенно прочитайте Какой самый простой способ использовать ssh и запустить несколько команд в Bash? и его ответы.

...