Скрипт bash выполняет команды после ssh

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

#!/bin/bash

#connect to server
echo "Connecting to the server..."

ssh -t root@IP '

    #switch user to deploy
    su - deploy

    #switch path
    echo "Switching the path"
    cd /var/www/deploys/bin/app/config

    #run deploy script
    echo "Running deploy script"

    /usr/local/bin/cap -S env=prod deploy

    #restart apache
    sudo /bin/systemctl restart  httpd.service

    bash -l
'

Что случилось? Я успешно подключаюсь к серверу, пользователь меняется, а затем я не вижу, чтобы ничего не происходило. Когда я просто нажимаю ctrl + c в терминале, появляется некоторый вывод из команды, которая должна быть выполнена, но есть некоторые ошибки.

Почему я не вижу всего, что происходит в терминале после запуска скрипта? Я делаю это неправильно?

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

Использование CentOS 7.


person Lukas Lukac    schedule 17.10.2014    source источник


Ответы (1)


Чистый способ войти в систему через ssh и выполнить набор команд:

ssh user@ip << EOF
   #some commands
EOF

здесь EOF действует как разделитель для списка команд

сценарий можно изменить как

ssh -t root@IP << EOF

    #switch user to deploy
    su - deploy

    #switch path
    echo "Switching the path"
    cd /var/www/deploys/bin/app/config

    #run deploy script
    echo "Running deploy script"

    /usr/local/bin/cap -S env=prod deploy

    #restart apache
    sudo /bin/systemctl restart  httpd.service

    bash -l
EOF

выполнит команду и закроет там соединение после

person nu11p01n73R    schedule 18.10.2014
comment
Мне пришлось добавить -t -t в соответствии с этими инструкциями, но в остальном это здорово - person quietContest; 20.03.2017
comment
я могу удалить bash -l? не совсем понимаю его использование. - person Miranda; 10.04.2018