Skip to main content

Utility library for command invocation via ssh

Project description

Overview

This module was inspired by the SFTP for Sublime Text plugin.

As such, it facilitates interacting with remote hosts via ssh,
with the added bonus of providing a means to mirror your local
working directory to the specified path on the remote host in order
to facilitate local-edit/remote-build.

With this module you can:

  • Edit and manipulate your scripts locally and execute them remotely,
    with file synchronization capabilities
  • Map a local folder to a remote folder

Prerequisites:

  • Python 3.7+
  • paramiko
  • If working with git repos, the module requires that git be installed locally and remotely

Installation

  • From pypi: pip3 install bertdotssh
  • From this git repo: pip3 install git+https://github.com/berttejeda/bert.sshutil.git
    Note: To install a specific version of the library from this git repo,
    suffix the git URL in the above command with @{ tag name }, e.g.:
    git+https://github.com/berttejeda/bert.sshutil.git@1.0.0

Usage Examples

Get process status for a remote host via ssh

from bertdotssh.provider import RemoteCLIProvider

settings = {
  'host': 'myhost.example.local', 
  'remote_path': '/home/myusername',
  'port': 22, 
  'ssh_key_file': '~/.ssh/id_rsa', 
  'user': 'myusername'
}

remote = RemoteCLIProvider(settings)

remote.run('ps')

Syncronize local files to remote and run a local script against the same host

Given:

  • Local working directory: /home/myusername/some/path
  • Local script: myscript.sh
from bertdotssh.provider import RemoteCLIProvider

settings = {
  'host': 'myhost.example.local', 
  'remote_path': '/home/myusername',
  'port': 22, 
  'ssh_key_file': '~/.ssh/id_rsa', 
  'user': 'myusername',
  'sync_no_clobber': True,
  'sync_on': True  
}

remote = RemoteCLIProvider(settings)

remote.run('myscript.sh')

Syncronize local git repo to remote and run a local script against the same host

Given:

  • Local working directory (a git repo) at: /home/myusername/some/git/myrepo
  • Local script at: /home/myusername/some/git/myrepo/myscript.sh
  • Git repo on remote host at: /home/myusername/some/other/path/git/myrepo
from bertdotssh.provider import RemoteCLIProvider

settings = {
  'host': 'myhost.example.local', 
  'remote_path': '/home/myusername/some/other/path/git/myrepo',
  'port': 22, 
  'ssh_key_file': '~/.ssh/id_rsa', 
  'user': 'myusername',
  'sync_no_clobber': True,
  'sync_on': True  
}

remote = RemoteCLIProvider(settings)

remote.run('myscript.sh',
  git_username='my_git_username', 
  git_password='my_git_password')

File syncrhonization behavior

The above example scenarios exhibit the following programmatic behavior upon sync:

  1. Determine if local working directory is a git repo
  • If True
    • Determine the URL for the git remote via command git config --get remote.origin.url
    • Determine the paths for any locally changed files via command git diff-index HEAD --name-status
    • Determine the paths for any untracked files via command git ls-files --others --exclude-standard
    • Produce a list of files to sync by combining the output of the above two commands
  • If False
    • Produce a list of files to sync that have changed within the last 5 minutes
  1. Determine if remote path exists
  • If False
    • If local is a git repo
      • Perform a git clone of the git repo against the remote path
      • Else, create the remote directory and synchronize the file list across the remote
  • If True, determines if remote path is a git repo
    • Determine set of files that have changed in the remote path
    • If True & sync_no_clobber == True, synchronize locally changed
      files to remote path, skipping any files that have also changed on the remote
    • If True & sync_no_clobber == False, synchronize locally changed
      files to remote path, overwriting any files that have also changed on the remote

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

btssh-1.2.0.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

btssh-1.2.0-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file btssh-1.2.0.tar.gz.

File metadata

  • Download URL: btssh-1.2.0.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.12

File hashes

Hashes for btssh-1.2.0.tar.gz
Algorithm Hash digest
SHA256 5fc27ec6739cc08f38247053cf838defe1474bd20165c617274f5b2f63512a00
MD5 1199c44eb1147f4e55b0439cff89cbee
BLAKE2b-256 3d10d2b97ce371daaa6ecff34480c667aa532f0a6df8e866b072e78bc3c1715b

See more details on using hashes here.

File details

Details for the file btssh-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: btssh-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.12

File hashes

Hashes for btssh-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5631584939e0f808276b277fae54b42d6cfa0d1855a422f191d07bdea6dad14f
MD5 4b94813b6639528829677029091984d6
BLAKE2b-256 5d4d09f46ff62a848ead185e2056f1761d01149e5388cfb1441d56c351418ab2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page