Oui, vous devez spécifier une adresse IP et un port de destination lors de l'utilisation du transfert local. De man ssh
:
-L [bind_address:]port:host:hostport
Specifies that the given port on the local (client) host is to be
forwarded to the given host and port on the remote side.
De toute évidence, seule l'adresse de liaison est facultative.
Non, vous ne pouvez pas spécifier d'hôte ou de port de destination lors de l'utilisation du transfert dynamique. Dans le transfert dynamique, SSH agit comme un proxy SOCKS. Encore une fois à partir de la page de manuel (c'est moi qui souligne):
-D [bind_address:]port
Specifies a local “dynamic” application-level port forwarding.
This works by allocating a socket to listen to port on the local
side, optionally bound to the specified bind_address. Whenever a
connection is made to this port, the connection is forwarded over
the secure channel, and the application protocol is then used to
determine where to connect to from the remote machine. Currently
the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
as a SOCKS server.
Avec -L
, SSH ne tente pas de comprendre le trafic. Il envoie simplement tout ce qu'il reçoit sur le port local au port cible - vous déterminez le port cible au moment où la connexion est établie. Avec -D
, SSH agit comme un serveur proxy et peut donc gérer les connexions à partir de plusieurs ports (par exemple, un navigateur configuré pour l'utiliser comme proxy SOCKS peut alors accéder à HTTP, HTTPS, FTP, etc. via la même connexion). Et comme avec d'autres serveurs proxy, il utilisera le trafic pour déterminer la destination.