Skip to main content

SSH eXtensions

Project description

sshx (SSH eXtensions)

Build Status codecov license

sshx is a lightweight wrapper for ssh/scp command, which has the following features:

  • Remember your ssh account
  • Connect to your account with a short command, without typing password
  • Enable jump host for your connection
  • Create ssh forwarding with a short command, without typing password
  • Enable jump host for your port forwarding
  • Copy files from/to your account with a short command, without typing password
  • Enable jump host for your scp connection

Installation

Install from pypi

For Windows:

pip install --extra-index-url https://wqyjh.github.io/python-wheels/ sshx

For Linux, macOS:

pip install sshx

Install from source

For Windows:

pip install --extra-index-url https://wqyjh.github.io/python-wheels/ git+https://github.com/WqyJh/sshx

# Or

pip install -i  https://wqyjh.github.io/python-wheels/ pyHook
python setup.py install

# Or

pip install -r requirements.txt

For Linux, macOX:

pip install git+https://github.com/WqyJh/sshx

# Or

python setup.py install

# Or

pip install -r requirements.txt

Quick Start

  1. Initialization.
sshx init
  1. Adding an account.
sshx add myhost -l test@192.168.9.155

(This command will ask you to type your password and sshx would store the encrypted password.)

  1. Connect to the account.
sshx connect myhost

Usage

Initialization

sshx init performs initialization.

It will automatically create the following files which storing the account info. If the files are damaged you'll probably lost all the account records, so DON'T TOUCH IT. If this happened, use this command to re-init and use add command to re-add them.

$ sshx init
$ tree ~/.sshx
~/.sshx
└── .accounts

Add accounts

sshx add adds an account.

# add an account in an simple way
sshx add myhost -l user@host:port

# add an account and specify an password for authentication
sshx add myhost -H host -P port -u user -p

# add an account and specify an identity file for authentication
sshx add myhost -H host -P port -u user -i identity_file

# add an account and specify both password and identity file for authentication
sshx add myhost -H host -P port -u user -p -i identity_file

# add an account named myhost2 and specify an password for authentication
# use pre-added myhost as it's jump host
sshx add -l user@host:port -v myhost myhost2
  • Host and user options are required for adding an account.
  • Either a password or a identity option is required for adding an account. You can also specify both of them for an account. In this case, only using identity for authentication(maybe improved later).
  • Password are input from the prompt, which won't show in the screen.

Show accounts

sshx list lists all the accounts in the following format.

name                host                          user                via                 
-----               -----                         -----               -----               
host1               192.168.7.1                   root                                    
host2               192.168.7.2                   test                host1               
host3               192.168.7.3                   root                host2               

sshx show show details for a specified account.

sshx show host1     # Show account info
sshx show host2 -p  # Show account info with password

Delete accounts

sshx del deletes an account.

sshx del host1

Update accounts

sshx update updates an account.

The supported options are the same with add command, all the specified fields will be updated.

# change the host1's host field to domain.com
sshx update host1 -H domain.com

# change the host1's password
sshx update host1 -p

# change the host1's identity to identity2
sshx update host1 -i identity2

# TODO
# change the host1's name to host2, and the next time you want to 
# change the account you have to use `sshx update host2 ...`
#sshx update host1 -n host2

Connect accounts

sshx connect connect to an account.

# Connect to host1 directly.
sshx connect host1

# Connect to host1 using host2 as jump host.
# If the host1 was originally has an jump host,
# this argument would temporarily override it.
sshx connect host1 -v host2

# Connect to hsot1 using host2 as jump host,
# while the host2 is using host3 as jump host.
sshx connect host1 -v host2,host3

Note that if you use -v option, all of the accounts' via field will be ignored.

Create socks5 proxies

sshx socks creates socks5 proxies.

sshx socks host1 # create socks proxy on port 1080
sshx socks host1 -p 1080 # create socks proxy on port 1081

Why create socks5 proxies with ssh?

Because it's very simple and safe.

  • simple no configurations and installations, all you need is just an ssh server
  • safe all traffic will be encrypted by ssh, safer than shadowsocks

Create port forwardings

sshx forward creates port fowardings.

sshx forward host1 [-f <map1> [map2]] [-rf <rmap1> [rmap2]] [-v host2[,host3]]

map: [bind_address]:bind_port:remote_address:remote_port

rmap: bind_address:bind_port:local_address:local_port

For example:

# Forward localhost:8888 to 192.168.77.7:80, 
# while the host1 is the intermedia server, 
# so you must ensure the host1 could dial to 192.168.77.7:80.
sshx forward host1 -f :8888:192.168.77.7:80
# Forward host1:8888 to 192.168.99.9:8888. 
# When you access localhost:8000 on host1, 
# the connection would be forward to 192.168.99.9:8888, 
# while your computer is working as a intermediate server 
# so you have to ensure your computer has access to 192.168.99.9:8888.
sshx forward host1 -r :8000:192.168.99.9:8888
  • You can use -f and -rf arguments simultaneously.
  • You can also specify multiple maps after either -f or -rf.
  • You can use -v option to specify jump hosts just as connect.

Copy files

sshx scp copy files to/from servers.

# Copy local files to host1
sshx scp <src> host1:<dst>

# Copy remote files from host1 to local
sshx scp host1:<src> <dst>

# Copy local files to host1, using host2 as jump host
sshx scp <src> host1:<dst> -v host2

# Copy remote files to local, using host2 as jump host
# and using host3 as host2's jump host.
sshx scp host1:<src> <dst> -v host2,host3

TODO:

# Copy remote files from host1 to host2
sshx scp host1:<src> host2:<dst>

Execute command

sshx exec execute an remote command.

# Execute `ls -al` on host1
sshx exec host1 ls -al
# Execute an command with tty
sshx exec host1 /bin/bash
# Execute an command on host1 via host2
sshx exec -v host2 host1 ls -al

Test

python setup.py test

Todo

  • scp support
  • jump host support

Bugs

Changelog

All notable changes to this project will be documented in this file. Dates are displayed in UTC.

Generated by auto-changelog.

0.19.8

8 October 2019

  • fix(update): fix rename account #43
  • feat: add sort and reverse for command list #42
  • add comand exec #41
  • refactor: remove win cmd support #40
  • chore: use pipenv to replace pip #38
  • Fix update #36
  • feat: add command exec 2047646
  • refactor: remove interact for exec b803b06
  • docs: update README.md for command exec 8116229

0.17.5

20 September 2019

  • Release 0.17 #35
  • Fix unitest #33
  • Add ssh socks #32
  • feat: add command show #31
  • fix: fix uploading failure on OSX #26
  • refactor: merge the interact and non interact version of ssh_pexpect 6ac0424
  • docs: update CHANGELOG.md 033a51a
  • feat: add socks command 3446e68

0.4.3

14 July 2019

  • Release 0.4.3 #24
  • Remove py2 #23
  • feat: remove python 2 support 01fe616
  • chore: add auto-changelog ab37b65
  • chore: remote auto-changelog 17ea081

0.3.1

13 July 2019

  • Release 0.3.1 #22
  • Fix output with logging module #21
  • feat: add logging a8fd721
  • chore: add auto deployment to PYPI ddb3044
  • fix: remove prints d7452a1

0.3.0

12 July 2019

  • Release 0.3 #19
  • Add scp support #18
  • feat: add jump host for scp b8ed38f
  • feat: add sshx forward command 85a344a
  • feat: add scp command 48bd0fd

0.2.1

23 June 2019

  • Release 0.2.1 #17
  • feat: add via argument for connect #16
  • version: 0.2.1 1553d85

0.2.0

23 June 2019

  • version: 0.2.0 #15
  • Add jump host #14
  • refactor: Encapsulate the config and account into class 6c6864b
  • refactor: Use Account in sshwrap 39291f5
  • feat: add jump connection for pexpect ea22b44

0.1.0

18 October 2018

  • Add simplifier syntax for add command #12
  • feat: Add auto-adjust window size #11
  • Finished basic function 9772f83
  • Initial commit 1d97f1d
  • Add password encrypt 95e2604

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

sshx-0.19.8.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

sshx-0.19.8-py2.py3-none-any.whl (30.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file sshx-0.19.8.tar.gz.

File metadata

  • Download URL: sshx-0.19.8.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.7

File hashes

Hashes for sshx-0.19.8.tar.gz
Algorithm Hash digest
SHA256 cb526bd9e43b8c2f195fab984398d7deeab2c00e9039329be205e0557d78d9ba
MD5 92883228b0b246880903e8bc71517759
BLAKE2b-256 026099a9b822ba10ca184f0dd17a288663fcbad514644cd29cf96d8020116338

See more details on using hashes here.

Provenance

File details

Details for the file sshx-0.19.8-py2.py3-none-any.whl.

File metadata

  • Download URL: sshx-0.19.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 30.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.7

File hashes

Hashes for sshx-0.19.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 52804e3a5c345d9b5237b4ad7f6efde94f582ddd96db56e3f9e421e4f4234358
MD5 df5136110e920e434b55e2f74854a7a0
BLAKE2b-256 f2cc892cc0c07267b13a7d50edbec9d5dc5e35fe014bd3734bc2cdde7746aacb

See more details on using hashes here.

Provenance

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