Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to execute a script remotely in Python using SSH?

def execute(self,command):
            to_exec = self.transport.open_session()
            to_exec.exec_command(command)
            print 'Command executed'
connection.execute("install.sh")

When I check the remote system, I found the script didn't run. Any clue?

like image 857
Jack Avatar asked Jan 09 '12 01:01

Jack


1 Answers

The code below will do what you want and you can adapt it to your execute function:

from paramiko import SSHClient
host="hostname"
user="username"
client = SSHClient()
client.load_system_host_keys()
client.connect(host, username=user)
stdin, stdout, stderr = client.exec_command('./install.sh')
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()

Note, though, that commands will default to your $HOME directory, so you'll either need to have install.sh in your $PATH or (most likely) you'll need to cd to the directory that contains the install.sh script.

You can check your default path with:

stdin, stdout, stderr = client.exec_command('getconf PATH')
print "PATH: ", stdout.readlines()

However, if it is not in your path you can cd and execute the script like this:

stdin, stdout, stderr = client.exec_command('(cd /path/to/files; ./install.sh)')
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()

If the script is not in your$PATH you'll need to use ./install.sh instead of install.sh, just like you would if you were on the command line.

If you are still having problems after everything above it might also be good to check the permissions of the install.sh file, too:

stdin, stdout, stderr = client.exec_command('ls -la install.sh')
print "permissions: ", stdout.readlines()
like image 88
aculich Avatar answered Oct 11 '22 14:10

aculich