Skip to content

Instantly share code, notes, and snippets.

@mattyjones
Last active November 16, 2020 16:20
Show Gist options
  • 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()
@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