Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Execute local script on remote Linux host

Tags:

bash

root

host

I have a local script that will not run without root privs on the remote host. I have edited and allowed the sudoers file to run the script from the home dir (/home/username/script). The script creates a txt file with the results but I redirect the output to terminal and pipe the output to a text file on the local machine.

I cannot "ssh user@hostname sudo -Sv < script.sh > results.txt" because this will not run the script from the remote host, specifically the home dir.

Does anyone know of a way (one line) to copy the script to the remote host & execute it as root while retrieving the output?

Thank you for any assistance

like image 344
John Milller Avatar asked Aug 01 '13 18:08

John Milller


2 Answers

if you have sudo, AND allowed to sudo to root, then this works with a bit less syntax:

ssh -T user@hostname 'sudo su -' < script.sh

like image 137
Gregory Patmore Avatar answered Sep 27 '22 22:09

Gregory Patmore


Copy the script with scp, then run it.

scp script.sh user@hostname:
ssh user@hostname sudo ./script.sh > results.txt

To do it in one line:

ssh user@hostname 'cat > script.sh; chmod 755 script.sh; sudo ./script.sh' < script.sh > results.txt

However, this won't work if you need to enter a password into sudo. All of ssh's stdin will be put in the script. There might be a way to do this using Expect, but I don't have much expertise there.

like image 34
Barmar Avatar answered Sep 27 '22 23:09

Barmar