- Notifications
You must be signed in to change notification settings - Fork4
Secure shell in your browser
License
NotificationsYou must be signed in to change notification settings
leshniak/httpsh
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A bunch of scripts and configs that allows to expose a shell via HTTPS.
- works as a system service
- the service fulfills the principle of minimal privilege (can't simply use
/bin/login
as it requires root privileges) - exposes a web client with the user's shell
- supports password authentication
- has an optional protection against brute force attacks
- uses secure transport protocols
The project depends on bash, ssh (client+server), systemd,ttyd, nginx, grep and optionally fail2ban (if you want to have a brute force protection). sshd must be configured for accepting incoming local connections.
Everything was tested on Debian Linux.
- Copy the config files (
etc
folder) to the corresponding directories in your system. - Download ttyd and put the executable in
/usr/local/bin/ttyd
. You can choose another directory, but don't forget to edit the config files. - Put
ttyd-login
script in/usr/local/bin/ttyd-login
. Applychmod +x
for both executables. - Create a user named
ttyd
, with a home directory and disabled login shell. It is required for~/.ssh
files. The home can be custom, for example/var/local/ttyd/
:
# mkdir -p /var/local/ttyd# useradd -d /var/local/ttyd -s /bin/false ttyd# chown -R ttyd:ttyd /var/local/ttyd
- Add a new location in nginx configuration for your domain. If you want to have a shell under
https://example.com/shell
, add this to theserver
section:
location ~ ^\/shell(\/.*)?$ { include snippets/shell.conf;}
- Reload systemd unit files
systemctl daemon-reload
. - Restart all edited services:
# systemctl restart nginx# systemctl restart fail2ban
- Start
httpsh
service and enable the autostart during the system startup:
# systemctl start ttyd@shell# systemctl enable ttyd@shell
- The shell should be up and running under
https://example.com/shell
I recommend to use fail2ban protection and TLS v1.3 for your domain.DO NOT use plain HTTP without TLS – it's like using telnet instead of ssh.
If you have any questions, please create a new Github issue.
If you appreciate my work, it will be cool to know that I drink mycoffee ☕ thanks to you!
About
Secure shell in your browser
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published