.\" Generated by scdoc 1.11.5 .\" Complete documentation for this program is not available as a GNU info page .ie \n(.g .ds Aq \(aq .el .ds Aq ' .nh .ad l .\" Begin generated content: .TH "hussh" "1" "2026\-08\-24" .PP .SH NAME .PP hussh \- Memory\-safe SSH daemon for restricted TCP forwarding .PP .SH SYNOPSIS .PP \fBhussh\fR [\fIoptions\fR] .PP .SH DESCRIPTION .PP \fBhussh\fR is a minimal SSH server that only implements TCP forwarding ("direct\-tcpip").\& It is intended for use as a restricted SSH tunnel, proxy or jump host where interactive login sessions and remote command execution are not required or desired.\& Only public\-key authentication is supported, password logins are never accepted.\& An optional low\-interaction honeypot mode can log or report unsolicited password authentication attempts.\& .PP Interactive shell sessions, PTY allocation, and remote command execution are all explicitly not supported.\& .PP By default, \fBhussh\fR binds to `[::]:2` and runs in the foreground.\& .PP .SH OPTIONS .PP \fB\-c\fR, \fB\-\-config\fR \fIPATH\fR .RS 4 Path to the TOML configuration file.\& Required for daemon mode.\& .PP .RE \fB\-B\fR, \fB\-\-bind\fR \fIADDRESS\fR .RS 4 Address to bind to (socket address).\& Example: `[::]:22` .PP .RE \fB\-K\fR, \fB\-\-keygen\fR .RS 4 Generate an Ed25519 private key in OpenSSH format and print it to stdout, then exit.\& .PP .RE \fB\-v\fR, \fB\-\-verbose\fR .RS 4 Increase log verbosity.\& Repeat to increase detail.\& .PP .RE \fB\-\-help\fR .RS 4 Show command help and exit.\& .PP .RE \fB\-\-version\fR .RS 4 Show version and exit.\& .PP .RE .SH CONFIGURATION .PP The default configuration file location is \fB/etc/hussh.\&conf\fR.\& A minimal configuration would look like this: .PP .nf .RS 4 [[rules]] ssh_keys = [ "ssh\-ed25519 AAAAC3Nyourkeyhere", ] # Allowed destinations to connect to permit = ["*"] .fi .RE .PP A more elaborate configuration could look like this: .PP .nf .RS 4 [sshd] # Change the ssh bind address (port 22 on ipv4 + ipv6) bind_addr = "[::]:22" [[rules]] # Instead of allowing any username, require a specific value username = "proxy" ssh_keys = [ "ssh\-ed25519 AAAAC3Nyourkeyhere", "ssh\-ed25519 AAAAC3Nanotherkey", ] # Allowed destinations to connect to permit = [ # All ports on specific destinations "example\&.com:*", "127\&.0\&.0\&.1:*", # Filter by port "*:443", ] # If the previous rule didn\&'t match, try this one next: [[rules]] ssh_keys = [ "ssh\-ed25519 AAAAC3Nyourkeyhere", ] permit = [ # Allow specific locations only "127\&.0\&.0\&.1:8080", "[::1]:8080", ] .fi .RE .PP .SH RULES SYNTAX .PP The \fIpermit=\fR option allows both specific destinations and wildcard expressions.\& The following are valid: .PP \fIHOST:PORT\fR, \fIIP:PORT\fR .PP .RS 4 Exact match of IP address or hostname, and port number.\& .PP \fBExample:\fR \fIexample.\&com:443\fR, \fI127.\&0.\&0.\&1:22\fR, \fI[::1]:22\fR .PP .RE \fIHOST:*\fR, \fIIP:*\fR .PP .RS 4 Exact match of IP address or hostname, and any port number.\& .PP \fBExample:\fR \fIexample.\&com:*\fR, \fI127.\&0.\&0.\&1:*\fR, \fI[::1]:*\fR .PP .RE \fI*\fR:\fIPORT\fR .PP .RS 4 Any host or IP address, but exact match of port number.\& .PP \fBExample:\fR \fI*:443\fR .PP .RE \fI*:*\fR, \fI*\fR .PP .RS 4 Any host or IP address, and any port number.\& Can also be abreviated as just \fI*\fR.\& .PP \fBExample:\fR \fI*:*\fR, \fI*\fR .PP .RE .SH SSH CLIENT EXAMPLES .PP Set it up as a jump host for a 2nd, localhost\-only SSH daemon: .PP .nf .RS 4 cat >> ~/\&.ssh/config <