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:
- 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
- Determine the URL for the git remote via command
- If False
- Produce a list of files to sync that have changed within the last 5 minutes
- 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 local is a git repo
- 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
Release history Release notifications | RSS feed
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)
Built Distribution
btssh-1.2.0-py3-none-any.whl
(15.4 kB
view details)
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fc27ec6739cc08f38247053cf838defe1474bd20165c617274f5b2f63512a00 |
|
MD5 | 1199c44eb1147f4e55b0439cff89cbee |
|
BLAKE2b-256 | 3d10d2b97ce371daaa6ecff34480c667aa532f0a6df8e866b072e78bc3c1715b |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5631584939e0f808276b277fae54b42d6cfa0d1855a422f191d07bdea6dad14f |
|
MD5 | 4b94813b6639528829677029091984d6 |
|
BLAKE2b-256 | 5d4d09f46ff62a848ead185e2056f1761d01149e5388cfb1441d56c351418ab2 |