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