Пара основных моментов:
Сценарий оболочки - это последовательный набор команд, которые должна выполнить оболочка.Он запускает программу, ожидает ее завершения и затем запускает следующую.
Программа 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? и его ответы.