Skip to content

Instantly share code, notes, and snippets.

@mattyjones
Last active November 16, 2020 16:20
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save mattyjones/10666342 to your computer and use it in GitHub Desktop.
Save mattyjones/10666342 to your computer and use it in GitHub Desktop.
Execute a script located on a remote server over ssh using python
#! /usr/bin/env python
import secure
import pexpect
# the file containing the list of servers to log into
input_file = "script_list"
# The login creds
user = secure.USER
password= secure.PASSWORD
def ssh_command (user, host, password, command):
"""This runs a command on the remote host."""
print " I am logging into", host
ssh_newkey = 'Are you sure you want to continue connecting'
child = pexpect.spawn('ssh -l %s %s %s'%(user, host, command))
i = child.expect([pexpect.TIMEOUT, ssh_newkey, 'password: '])
if i == 0: # Timeout
print('ERROR!')
print('SSH could not login. Here is what SSH said:')
print(child.before, child.after)
return None
if i == 1: # SSH does not have the public key. Just accept it.
child.sendline ('yes')
child.expect ('password: ')
i = child.expect([pexpect.TIMEOUT, 'password: '])
if i == 0: # Timeout
print('9ERROR!')
print('SSH could not login. Here is what SSH said:')
print(child.before, child.after)
return None
child.sendline(password)
return child
def main():
f = open(input_file, "r")
server_list = f.readlines()
for server in server_list:
child = ssh_command (user, server, password, 'script.sh')
child.expect(pexpect.EOF)
output = child.before
if __name__ == "__main__":
main()
@chrisotter92
Copy link

Sorry, this may seem like a dumb question but where do I get the secure module?

@Arnold1
Copy link

Arnold1 commented Jan 18, 2018

how to execute a script from a local server on a remote server?

@alphaCTzo7G
Copy link

@chrisotter92, you dont need to know about the secure module. It seems that on line 10-11 matt is just using the secure module to extract the username and password as strings.

You should already know the username and password, which you can provide, without invoking the secure module

@alphaCTzo7G
Copy link

@Arnold1.. this is exactly what the script is doing using the pexpect library:https://github.com/pexpect/pexpect

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment