wolfssh/apps/wolfssh
John Safranek 48f36f753a Reject an out-of-range -p port
The -p option of wolfssh, client, wolfscp, wolfsftp and echoserver now
goes through a strtol check, so a value that is not wholly a number in
range exits with an error instead of wrapping into a different port.

- apps/wolfssh: ClientParsePort(), shared with ClientParseDestination(),
  which also rejects an empty "ssh://host:" port instead of defaulting
- examples: a ClientParsePort() in examples/client/common.c; port 0 is
  rejected in every build, not only with a main driver
- echoserver: accepts 0 to 65535, keeping 0 for the test harness
- add TestClientParsePort and an empty URI port case to regress.test

Issue: F-14763, F-14767, F-14768, F-12552
2026-10-28 13:10:29 -05:00
..
README.md Don't build the client app against a single threaded wolfSSL 2026-08-26 16:53:23 -05:00
common.c Reject an out-of-range -p port 2026-10-28 13:10:29 -05:00
common.h Reject an out-of-range -p port 2026-10-28 13:10:29 -05:00
include.am wolfSSH Client 2023-09-25 09:23:13 -07:00
wolfssh.c Reject an out-of-range -p port 2026-10-28 13:10:29 -05:00

README.md

WOLFSSH CLIENT

The wolfSSH client will connect to a server and try to open a terminal. It'll default the username to your current username, and it will try to use your ecdsa private key to authenticate. The key file path is hard coded to $HOME/.ssh/id_ecdsa. It is currently far enough along I can use it. The private keys are the ones produced by the OpenSSL command line tool, not the ssh-keygen tool.

Phase 2 is going to bring reading the config files /etc/ssh/ssh_config and $HOME/.ssh/config. It will handle OpenSSH style modern keys. It will also have support for SSH-AGENT and forwarding.

Every session, terminal or command, runs its I/O on threads, so the client needs a threaded wolfSSL. Configuring --enable-sshclient against a single-threaded wolfSSL is an error, and --enable-all leaves the client out rather than failing.

Command Line Options

-E logfile    : Append the log to this file instead of stderr, and turn
                logging on. The log is empty unless the library has
                logging compiled in, with `--enable-debug` or
                `--enable-sshd`.
-G            : Print out the configuration as used.
-l login_name : Overrides the login name specified in the destination.
-p port       : Overrides the destination port number.
-V            : Print out the version.

The destination option is the only required option. It can be in the two following formats:

[user@]hostname
ssh://[user@]hostname[:port]

Anything after the destination is taken as a command to run on the server. With no command, the client opens an interactive terminal session.

The default value for user is the current user's login name. The default value for port is 22.