I wanted a very simple command line tool, that I could use to give remote access to my terminal session to somebody. Whether it was for a quick pair-programming, or for debugging, I wanted it to be extremely simple for the remote person to join the shared session. So I decided to start with using the browser for the remote end. The browser might not be the most friendly environment for a geek to type code, or shell commands, but it is something that everyone has - it’s present even in the most obscure Linux distributions. So I start it, I get a secret URL that I share with the remote person, they open it in the Browser, and that’s it: they have access to my shell session. And again, the important part is that this requires no setup on their machine - the web browser is all they need.
The gif below shows the very basic use-case, when the
tty-share is launches
bash and creates the session secret URL. The URL is opened in the browser, and the
bash session is accessible from the Browser, anywhere over the Internet.
VSC (Visual Studio Code) Live Share
I’ve tried Visual Studio Code sharing, and it seems to work relatively well. One big advantage is that both persons in the session can write code, and navigate independently of each other. It also supports terminal sharing.
However, the two disadvantages with this tool are the need of logging in with a Github (or Microsoft) account, and having to install Visual Studio Code on the remote side too. I don’t want to force the remote person to install VSC just for them to get access to a terminal session. Visual Studio Code might be popular in the web development circles, but it is not popular in the other development corners.
This is a great tool, and I used it quite a few times before. At the time I started my project, tmate.io didn’t have the option to join the session from the browser, and one had to use
ssh. In most cases,
ssh is not a problem at all - in fact it’s even preferred, but there are cases when you just don’t have easy access to an
ssh client, e.g.: joining from a Windows machine, or from your smartphone. In the meantime, the project added some support for joining a terminal session in the browser too.
Perhaps one downside with tmate is that it comes with quite a few dependencies which can make your life complicated if you want to compile it for ARM, for example. Running it on my raspberry pi might not be as simple as you want it, unless you use Debian.
How it works
tty-share command will start a shell (based on the value of
$SHELL env variable), and then route the output and input to the
tty-share, and finally to the browser session.
More information will come. Until then, the source code is the best place to find more: github.com/elisescu/tty-share.
Besides a few other things I think the tool should have, there are two major features I am thinking they would be useful:
At the moment, the communication with the server is encrypted on both sides using TLS and https. But I would like to add end-to-end encryption, so not even the
tty-server cannot read the messages send back and forth. The person starting the session will choose a password, that will be used to generate a shared key which will encrypt all messages from the
tty-share to the browser application.
At the moment, the secret session URL is generated by the server, and it’s invalidated immediately after the session
tty-share exits. It would be very useful to have that session persistent. The main use-case I have in mind is to be able to access my Raspberry Pi remotely, just by going to a secret URL, and to use the secret password I set for the end-to-end encrypted session. Even though my Raspberry Pi restarts, or is behind a NAT, whenever it reaches the Internet, and connects to that session, it will be accessible via the URL, from any browser (including the smartphone).
If you cared to try it, and have feedback, or a problem/question, I would love to hear back from you. Please create a Github issue: https://github.com/elisescu/tty-share/issues.