aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--getch.py38
-rwxr-xr-xsshmgr.py83
2 files changed, 121 insertions, 0 deletions
diff --git a/getch.py b/getch.py
new file mode 100644
index 0000000..be6203f
--- /dev/null
+++ b/getch.py
@@ -0,0 +1,38 @@
+class _Getch:
+ """Gets a single character from standard input. Does not echo to the
+screen."""
+ def __init__(self):
+ try:
+ self.impl = _GetchWindows()
+ except ImportError:
+ self.impl = _GetchUnix()
+
+ def __call__(self): return self.impl()
+
+
+class _GetchUnix:
+ def __init__(self):
+ import tty, sys
+
+ def __call__(self):
+ import sys, tty, termios
+ fd = sys.stdin.fileno()
+ old_settings = termios.tcgetattr(fd)
+ try:
+ tty.setraw(sys.stdin.fileno())
+ ch = sys.stdin.read(1)
+ finally:
+ termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
+ return ch
+
+
+class _GetchWindows:
+ def __init__(self):
+ import msvcrt
+
+ def __call__(self):
+ import msvcrt
+ return msvcrt.getch()
+
+
+getch = _Getch()
diff --git a/sshmgr.py b/sshmgr.py
new file mode 100755
index 0000000..497df06
--- /dev/null
+++ b/sshmgr.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+from getch import *
+from os import system
+
+CONN_DB_PATH = "sshmgr-db"
+
+def load_conns():
+ conns = []
+ with open(CONN_DB_PATH) as f:
+ conns = [l.strip() for l in f.readlines()]
+ return conns
+
+def create_new(conns):
+ name = input("Name the new connection: ")
+ conns.append(name)
+
+ save_conns(conns)
+
+def save_conns(conns):
+ with open(CONN_DB_PATH, 'w') as f:
+ for conn in conns:
+ f.write("{:s}\n".format(conn))
+
+def get_connection(conns, c):
+ try:
+ num = int(c)
+ except ValueError:
+ print("Selection needs to be a number!")
+ return False
+
+ if num < 1 or num > len(conns):
+ print("Selection not in range!")
+ return False
+
+ selection = conns[num - 1]
+ return selection
+
+def connect(connection):
+ system("screen ssh {}".format(connection))
+
+def delete_conn(conns):
+ c = input("Which connection should be removed? ")
+ deleted = get_connection(conns, c)
+ if not deleted:
+ print("Nothing was deleted.")
+ getch()
+ return
+
+ conns = [conn for conn in conns if conn != deleted]
+ save_conns(conns)
+
+def main():
+ running = True
+ while running:
+ conns = load_conns()
+ system("clear")
+
+ print("Select connection: ")
+ for i,conn in enumerate(conns):
+ print("({:d}) {:s}".format(i + 1, conn))
+ print("(n) New connection")
+ print("(d) Delete connection")
+ print("(q) Quit")
+
+ c = getch()
+
+ if (c == "q"):
+ return
+ elif (c == "d"):
+ delete_conn(conns)
+ elif (c == "n"):
+ create_new(conns)
+ else:
+ connection = get_connection(conns, c)
+ if not connection:
+ print("Select a valid connection.")
+ getch()
+ else:
+ connect(connection)
+ return
+
+if __name__ == "__main__":
+ main()