Upterm — Secure Terminal Sharing

Upterm is an open-source solution for sharing terminal sessions instantly with the public internet over secure tunnels.

What it’s good for

  • Remote pair programming
  • Access remote computers behind NATs and firewalls
  • Remote debugging
  • <insert your creative use cases>

How it works

You run the upterm program and specify the command for your terminal session. Upterm starts an SSH server locally and sets up a Reverse SSH tunnel to the Upterm server (a.k.a. uptermd). Clients connect to your terminal session over the public internet with ssh.

Installation

Mac

brew tap jingweno/upterm
brew install upterm

From source

go get -u github.com/jingweno/upterm/cmd/upterm

Quick Start

# Host a terminal session by running $SHELL
# The client's input/output is attached to the host's
$ upterm host

# Display the ssh connection string
$ upterm session current
=== BO6NOSSTP9LL08DOQ0RG
Command:                /bin/bash
Force Command:          n/a
Host:                   uptermd.upterm.dev:22
SSH Session:            ssh bo6nosstp9ll08doq0rg:MTAuMC4xNzAuMTY0OjIy@uptermd.upterm.dev

# Open a new terminal and connect to the session
$ ssh bo6nosstp9ll08doq0rg:MTAuMC4xNzAuMTY0OjIy@uptermd.upterm.dev

# Host a terminal session by running $SHELL
# The client's input/output is attached to the host's.
$ upterm host

# Display the ssh connection string
$ upterm session current
=== BO6NOSSTP9LL08DOQ0RG
Command:                /bin/bash
Force Command:          n/a
Host:                   uptermd.upterm.dev:22
SSH Session:            ssh bo6nosstp9ll08doq0rg:MTAuMC4xNzAuMTY0OjIy@uptermd.upterm.dev

# Open a new terminal and connect to the session
$ ssh bo6nosstp9ll08doq0rg:MTAuMC4xNzAuMTY0OjIy@uptermd.upterm.dev

# Host a session with a custom command.
# The client's input/output is attached to the host's.
$ upterm host -- docker run --rm -ti ubuntu bash

# Host a session by running 'tmux new -t pair-programming'.
# The host runs 'tmux attach -t pair-programming' after the client joins the session.
# The client's input/output is attached to this command's.
$ upterm host --force-command 'tmux attach -t pair-programming' -- tmux new -t pair-programming`,