Machine A -> public IP Machine B -> behind NAT
You can always SSH from Machine B to Machine A and expose any local Machine B port to the internet as a port on Machine A. The feature is called GatewayPorts and is a standard SSH feature (at least in OpenSSH). It does not require installing anything other than SSH on Machine A (or even Machine B, unless you want a script to re-establish the tunnel upon disconnect).