|Project Name||Stars||Downloads||Repos Using This||Packages Using This||Most Recent Commit||Total Releases||Latest Release||Open Issues||License||Language|
|Sshportal||1,595||a day ago||47||May 20, 2023||81||apache-2.0||Go|
|:tophat: simple, fun and transparent SSH (and telnet) bastion server|
|Streamhut||869||1||3||a year ago||5||April 19, 2019||9||apache-2.0||Go|
|Stream your terminal to web without installing anything 🌐|
|Telnet Iot Honeypot||272||2 years ago||3||Python|
|Python telnet honeypot for catching botnet binaries|
|Netty Spring Example||191||3 years ago||Java|
|TCP communication server with Netty And SpringBoot|
|Mud Pi||186||4 years ago||1||mit||Python|
|A simple MUD server in Python, for teaching purposes, which could be run on a Raspberry Pi|
|Go Telnet||176||7||28||2 years ago||1||April 21, 2018||17||mit||Go|
|Package telnet provides TELNET and TELNETS client and server implementations, for the Go programming language, in a style similar to the "net/http" library that is part of the Go standard library, including support for "middleware"; TELNETS is secure TELNET, with the TELNET protocol over a secured TLS (or SSL) connection.|
|Ts3 Nodejs Library||141||5||3||a month ago||78||September 19, 2023||1||mit||TypeScript|
|TeamSpeak 3 Server Query Library supports SSH and RAW Query|
|Telnet server for wikipedia content|
|Petscii Bbs||98||a day ago||13||mpl-2.0||Java|
|A Java framework for building highly customizable PETSCII-enabled BBS, accessible from Commodore 64/128|
|Hxnet||94||7 years ago||4||Haxe|
|Networking library for Haxe (UDP, TCP, RPC, Telnet, WebSocket)|
Jump host/Jump server without the jump, a.k.a Transparent SSH bastion
Features include: independence of users and hosts, convenient user invite system, connecting to servers that don't support SSH keys, various levels of access, and many more. Easy to install, run and configure.
Start the server
$ sshportal server 2017/11/13 10:58:35 Admin user created, use the user 'invite:BpLnfgDsc2WD8F2q' to associate a public key with this account 2017/11/13 10:58:35 SSH Server accepting connections on :2222
Link your SSH key with the admin account
$ ssh localhost -p 2222 -l invite:BpLnfgDsc2WD8F2q Welcome admin! Your key is now associated with the user "admin@sshportal". Shared connection to localhost closed. $
If the association fails and you are prompted for a password, verify that the host you're connecting from has a SSH key set up or generate one with
ssh-keygen -t rsa
Drop an interactive administrator shell
ssh localhost -p 2222 -l admin __________ _____ __ __ / __/ __/ // / _ \___ ____/ /____ _/ / _\ \_\ \/ _ / ___/ _ \/ __/ __/ _ '/ / /___/___/_//_/_/ \___/_/ \__/\_,_/_/ config>
Create your first host
config> host create [email protected] 1 config>
config> host ls ID | NAME | URL | KEY | PASS | GROUPS | COMMENT +----+------+-------------------------+---------+------+---------+---------+ 1 | foo | [email protected]:22 | default | | default | Total: 1 hosts. config>
Add the key to the server
$ ssh [email protected] "$(ssh localhost -p 2222 -l admin key setup default)" $
ssh localhost -p 2222 -l foo bart@foo>
This command doesn't create a user on the remote server, it only creates an account in the sshportal database.
config> user invite [email protected] User 2 created. To associate this account with a key, use the following SSH user: 'invite:NfHK5a84jjJkwzDk'. config>
Used by educators to provide temporary access to students. Feedback from a teacher. The author is using it in one of his projects, pathwar, to dynamically configure hosts and users, so that he can give temporary accesses for educational purposes.
vptech, the vente-privee.com technical team (a group of over 6000 people) is using it internally to manage access to servers/routers, saving hours on configuration management and not having to share the configuration information.
There are companies who use a jump host to monitor connections at a single point.
A hosting company is using SSHportal for its “logging” feature, among others. As every session is logged and introspectable, they have a detailed history of who performed which action. This company made its own contribution to the project, allowing the support of more than 65.000 sessions in the database.
The project has also received multiple contributions from a security researcher that made a thesis on quantum cryptography. This person uses SSHportal in their security-hardened hosting company.
If you need to invite multiple people to an event (hackathon, course, etc), the day before the event you can create multiple accounts at once, print the invite, and distribute the paper.
.ssh/config, works with every tested SSH programming libraries and every tested SSH clients
healthcheckas this is a built-in command.
Docker is the recommended way to run sshportal.
# Start a server in background # mount `pwd` to persist the sqlite database file docker run -p 2222:2222 -d --name=sshportal -v "$(pwd):$(pwd)" -w "$(pwd)" moul/sshportal:v1.10.0 # check logs (mandatory on first run to get the administrator invite token) docker logs -f sshportal
The easier way to upgrade sshportal is to do the following:
# we consider you were using an old version and you want to use the new version v1.10.0 # stop and rename the last working container + backup the database docker stop sshportal docker rename sshportal sshportal_old cp sshportal.db sshportal.db.bkp # run the new version docker run -p 2222:2222 -d --name=sshportal -v "$(pwd):$(pwd)" -w "$(pwd)" moul/sshportal:v1.10.0 # check the logs for migration or cross-version incompatibility errors docker logs -f sshportal
Now you can test ssh-ing to sshportal to check if everything looks OK.
In case of problem, you can rollback to the latest working version with the latest working backup, using:
docker stop sshportal docker rm sshportal cp sshportal.db.bkp sshportal.db docker rename sshportal_old sshportal docker start sshportal docker logs -f sshportal
Get the latest version using GO.
GO111MODULE=on go get -u moul.io/sshportal
sshportal embeds built-in backup/restore methods which basically import/export JSON objects:
# Backup ssh portal config backup > sshportal.bkp # Restore ssh portal config restore < sshportal.bkp
This method is particularly useful as it should be resistant against future DB schema changes (expected during development phase).
I suggest you to be careful during this development phase, and use an additional backup method, for example:
# sqlite dump sqlite3 sshportal.db .dump > sshportal.sql.bkp # or just the immortal cp cp sshportal.db sshportal.db.bkp
sshportal embeds a configuration CLI.
By default, the configuration user is
admin, (can be changed using
--config-user=<value> when starting the server. The shell is also accessible through
Each command can be run directly by using this syntax:
ssh [email protected] <command> [args]:
ssh [email protected] host inspect toto
You can enter in interactive mode using this syntax:
ssh [email protected]
The following servers are freely available, without external registration,
it makes it easier to quickly test
sshportal without configuring your own servers to accept sshportal connections.
ssh portal host create [email protected] ssh sdf@portal ssh portal host create [email protected] ssh whoami@portal ssh portal host create [email protected] ssh chat@portal
# acl management acl help acl create [-h] [--hostgroup=HOSTGROUP...] [--usergroup=USERGROUP...] [--pattern=<value>] [--comment=<value>] [--action=<value>] [--weight=value] acl inspect [-h] ACL... acl ls [-h] [--latest] [--quiet] acl rm [-h] ACL... acl update [-h] [--comment=<value>] [--action=<value>] [--weight=<value>] [--assign-hostgroup=HOSTGROUP...] [--unassign-hostgroup=HOSTGROUP...] [--assign-usergroup=USERGROUP...] [--unassign-usergroup=USERGROUP...] ACL... # config management config help config backup [-h] [--indent] [--decrypt] config restore [-h] [--confirm] [--decrypt] # event management event help event ls [-h] [--latest] [--quiet] event inspect [-h] EVENT... # host management host help host create [-h] [--name=<value>] [--password=<value>] [--comment=<value>] [--key=KEY] [--group=HOSTGROUP...] [--hop=HOST] [--logging=MODE] <username>[:<password>]@<host>[:<port>] host inspect [-h] [--decrypt] HOST... host ls [-h] [--latest] [--quiet] host rm [-h] HOST... host update [-h] [--name=<value>] [--comment=<value>] [--key=KEY] [--assign-group=HOSTGROUP...] [--unassign-group=HOSTGROUP...] [--logging-MODE] [--set-hop=HOST] [--unset-hop] HOST... # hostgroup management hostgroup help hostgroup create [-h] [--name=<value>] [--comment=<value>] hostgroup inspect [-h] HOSTGROUP... hostgroup ls [-h] [--latest] [--quiet] hostgroup rm [-h] HOSTGROUP... # key management key help key create [-h] [--name=<value>] [--type=<value>] [--length=<value>] [--comment=<value>] key import [-h] [--name=<value>] [--comment=<value>] key inspect [-h] [--decrypt] KEY... key ls [-h] [--latest] [--quiet] key rm [-h] KEY... key setup [-h] KEY key show [-h] KEY # session management session help session ls [-h] [--latest] [--quiet] session inspect [-h] SESSION... # user management user help user invite [-h] [--name=<value>] [--comment=<value>] [--group=USERGROUP...] <email> user inspect [-h] USER... user ls [-h] [--latest] [--quiet] user rm [-h] USER... user update [-h] [--name=<value>] [--email=<value>] [--set-admin] [--unset-admin] [--assign-group=USERGROUP...] [--unassign-group=USERGROUP...] USER... # usergroup management usergroup help usergroup create [-h] [--name=<value>] [--comment=<value>] usergroup inspect [-h] USERGROUP... usergroup ls [-h] [--latest] [--quiet] usergroup rm [-h] USERGROUP... # other exit [-h] help, h info [-h] version [-h]
sshportal will return
OK to anyone sshing using the
healthcheck user without checking for authentication.
$ ssh healthcheck@sshportal OK $
healtcheck user can be changed using the
Alternatively, you can run the built-in healthcheck helper (requiring no ssh client nor ssh key):
Usage: `sshportal healthcheck [--addr=host:port] [--wait] [--quiet]
$ sshportal healthcheck --addr=localhost:2222; echo $? $ 0
Wait for sshportal to be healthy, then connect
$ sshportal healthcheck --wait && ssh sshportal -l admin config>
~/.ssh/config file (create it first if needed)
Host portal User admin Port 2222 # portal port HostName 127.0.0.1 # portal hostname
# you can now run a shell using this: ssh portal # instead of this: ssh localhost -p 2222 -l admin # or connect to hosts using this: ssh hostname@portal # instead of this: ssh localhost -p 2222 -l hostname
sshportal is stateless but relies on a database to store configuration and logs.
sshportal uses a local sqlite database which isn't scalable by design.
You can run multiple instances of
sshportal sharing the same MySQL database, using
sshportal --db-conn=user:pass@host/dbname?parseTime=true --db-driver=mysql.
Install golangci-lint and run this in project root:
Perform integration tests
Perform unit tests
This project exists thanks to all the people who contribute. [Contribute].
Become a financial contributor and help us sustain our community. [Contribute]
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]