/sshto

Small bash script to manage your ssh connections. It builds menu (via dialog) from your ~/.ssh/config. Can run commands, copy files, tunnel ports and connect.

Primary LanguageShellMIT LicenseMIT

sshto

Small bash script that builds a menu (via dialog) from your ~/.ssh/config.
screeenshot
Allows you to connect to your servers or run commands from menu. Available commands:
screeenshot
Your commands can be easily added to this list. Just edit this part of the script:

cmdlist_renew () { cmdlist=(
    #Command#  #Description#
    "Username" "Change ssh username to $GUEST"
    ''         ''
    "ls  -la"  "List Files"
    "free -h"  "Show free memory"
    "df  -ih"  "Show free inodes"
    "df   -h"  "Show free disk space"
    ''         ''
    "Info"     "Full system info"
    "Sshkey"   "Add my ssh key to $target"
    "Alias"    "Add my usefull aliases to $target"
    "Copy"     "Copy selected file or dir to $target"
    ''         ''
    "Dest"     "Change destination folder $DEST on $target"
    "Upload"   "Upload   file or folder from $PWD to $target:$DEST"
    "Download" "Download file or folder from $target:$DEST to $PWD"
    ''         ''
    "Local"    "Change local  port $LOCAL"
    "Remote"   "Change remote port $REMOTE"
    "Tunnel"   "Start portunneling from $target port $REMOTE to local port $LOCAL"
    ''         ''
    "ShowConf" "Show ssh config for this host"
    "EditConf" "Edit ssh config for this host"
); }

First collumn - command, second - description.
Simple commands like 'ls -la' can be added as is.
A list of commands or a complicated logic better add via function.
Empty string is used as a delimiter.
You can quick jump to the selected server via CONNECT button.
When you done press ^D it'll bring you back to sshto commands section.

Hosts description needs to be added like this:

Host server1 #DESCRIPTION
HostName 192.168.0.1
Port 22
User admin

Start menu delimiters '---{ TEXT }---' can be added like this:

#Host DUMMY #TEXT#

~/.ssh/config example:

#Host DUMMY #Rybinsk#

Host rybserver1 #First server
HostName localhost

Host rybserver2 #Second server
HostName localhost

Host rybserver3 #Third server
HostName localhost

#Host DUMMY #Moscow#

Host moserver1 #First server
HostName localhost

Host moserver2 #Second server
HostName localhost

Host moserver3 #Third server
HostName localhost

Script greps data from multiple config files via pattername 'config*' in ~/.ssh dir.
So you can split config to multiple files and use them with Include directive, example:

Include config_moscow
Include config_rybinsk
Include config*

You can customize dialog colors by creating a config file:

dialog --create-rc ~/.dialogrc

How to install

Clone\download this project, go to it's folder and run:

sudo cp sshto /usr/bin/

#and to unistall
sudo rm /usr/bin/sshto

See how it works at asciinema

ssh config guide
Tom Lawrens video guide about ssh config and sshto

paypal Feel free to support the project!)

BTC: 1LxRxsyXP389YW3Ezw9YzNetE5VYj1RaJf
btc

BCH: qqnssal30x6acrga6zt4pd4q2s2t8um3cyqvd37qs7
bch

ETH: 0xd7e17A37DD936B211790ba70Aa985448277030E8
eth

XMR: 484z9YpiD4VBd4BfsaG7jKGYGuJ84tYJyCJBX4ZnAPqQXsUWgTY14TKRH3JLosFSAsKsv75nyt9yWPkFMUJhryxi7zccHNB
mon

LTC: LRVPYR7dvRVdNET23gg3fvTwDM9hotQkZw
ltc

DASH: Xtz7P6GasicE9yS8zXkH3PH2qAF2qWJADG
dash

ZEC: t1ZDgHci8yDVkoGvUFG7QtxUNRuzsF1Qtse
zec

MKR: 0xd7e17A37DD936B211790ba70Aa985448277030E8
mkr