Skip to content

bucknerns/sshaolin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

license GitHub issues

SSHaolin: SSH for Ninjas

Tired of dealing with python SSH interfaces that are far too complicated! Want a nice simple python SSH interface that just works! SSHaolin aims to give you that experience and more! Built on top of paramiko, SSHaolin is the python interface that makes it simple to write that ssh script you've been meaning to do for years!

Built into the SSHaolin core is verbose logging that shows you every command that is running along with the ability to decipher both stdout and stderr straight from your logs!

Also included are interfaces for both persistent ssh sessions (SSHShell) and sftp session (SFTPShell). Both are easy to use and provide a great speed boost as opposed to connecting and reconnecting for every action!

Have an issue? Submit it here!

Installation:

Recommended:

$ pip install git+https://github.com/bucknerns/sshaolin

Unit Tests

  • Must be running an SSH server at localhost:22
  • Must have Passwordsless SSH Auth to localhost
$ tox

Requirements:

Features:

  • Easily send commands over ssh!
  • Creating persistent ssh sessions!
  • Creating persistent sftp sessions!
  • Easy connection cleanup! (No more manual closing!)

Examples:

Running ls -ltr on server foo as user bar with password blah

from sshaolin.client import SSHClient

client = SSHClient(hostname='foo', username='bar', password='blah')
response = client.execute_command('ls -ltr')

# It comes with an exit status!
print(response.exit_status)

# It comes with stdout!
print(response.stdout)

# It comes with stderr!
print(response.stderr)

Transferring local file example.txt to server foo as user bar with RSA file authentication /home/bar/.ssh/id_rsa at /usr/local/src/example.txt and /usr/local/src/example2.txt

from sshaolin.client import SSHClient

client = SSHClient(
    hostname='foo', username='bar', key_filename='/home/bar/.ssh/id_rsa')
with open('example.txt', 'r') as fp:
    data = fp.read()

# Context managers to ensure the closing of a connection!
with client.create_sftp() as sftp:
    sftp.write_file(data=data, remote_path='/usr/local/src/example.txt')

# If you don't want to mess with context managers you can store it as a
# variable! SSHaolin will clean it up when the program exits!
sftp = client.create_sftp()
sftp.write_file(data=data, remote_path='/usr/local/src/example2.txt')

Sudoing to privelegeduser1, cd'ing to /usr/local/executables and running perl randomperlscript.pl

from sshaolin.client import SSHClient

client = SSHClient(
    hostname='foo', username='bar', key_filename='/home/bar/.ssh/id_rsa')
shell = client.create_shell()
# No more need to do hacky workarounds to sudo to another user!
shell.execute_command('sudo su privelegeduser1')
shell.execute_command('cd /usr/local/executables')
perl_response = shell.execute_command('perl randomperlscript.pl')
shell.close()  # We can close things manually as well!

if perl_response.exit_status == 0:
    print('Success!')
else:
    raise Exception('Failed to execute randomperlscript.pl correctly')

Contributing:

  1. Fork the repository!
  2. Commit some stuff!
  3. Submit a pull request!