Lukas Lukac
Lukas Lukac

Reputation: 8346

bash script execute commands after ssh

I am trying to execute a few commands via my first script but it's not working.

#!/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
'

What is happening? I am successfully connected to the server, the user is changed and then I don't see nothing happening. When I press ctrl + c just like that in terminal, some output from the command that should be executed appears but there are some errors.

Why I don't see everything what is happening in terminal after launching the script? Am I doing it the wrong way?

BTW: when I try connect manually and run the commands myself, everything is working nicely.

Using CentOS 7.

Upvotes: 27

Views: 33312

Answers (1)

nu11p01n73R
nu11p01n73R

Reputation: 26667

Clean way to login through ssh and excecute a set of commands is

ssh user@ip << EOF
   #some commands
EOF

here EOF acts as the delimitter for the command list

the script can be modified as

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

will excecutes the command and closes the connection there after

Upvotes: 64

Related Questions