Je veux utiliser mon ordinateur comme proxy chaussettes. Avez-vous juste à faire ssh -D port_number hostname
? Dois-je mettre mon nom d'utilisateur Linux comme le hostname
?
tL; DR - Demandez le texte audacieux ci-dessous.
Remarque: j'utilise $
Préfixe pour les chaînes Vous devez remplacer les valeurs souhaitées. Cette syntaxe est non signifiait être entièrement compatible avec des variables dans n'importe quelle coquille.
L'utilisation de ssh -D
est vraiment comme ça:
ssh -D $port_number $hostname
ou alors
ssh -D $port_number $username@$hostname
Où $hostname
identifie une machine; Il peut s'agir d'une adresse IP, d'une adresse résolvable via DNS ou via /etc/hosts
fichier ou via ssh_config
Fichier, etc. La première commande utilisera votre nom d'utilisateur actuel (local), à moins que votre ssh_config
Fichier indique le contraire (par défaut, il ne le fait pas). Vous devez fournir des informations d'identification (comme $username
et mot de passe lorsqu'il est demandé) valide au $hostname
machine.
Cela ouvrira le $port_number
TCP Port sur votre local ordinateur et établissez un serveur de chaussettes dessus. Remarque Vous ne pouvez pas être autorisé à ouvrir certains ports comme utilisateur régulier, en particulier inférieur à 1024
, utilisez un nombre plus élevé alors.
En général, la situation sans chaussettes proxy fournies par ssh
est comme ceci:
A -> D
où A
est un client (E.G. Web Browser), D
est un serveur (E.G. Web Server). Mais avec proxy, c'est comme suit:
A -> B -> C -> D
où:
A
représente un seul client qui utilise B:$port_number
comme adresse de chaussettes; Il peut y avoir beaucoup de clients.B
est la machine où ssh -D $port_number C
fonctionne et où le TCP $port_number
écoute les connexions entrantes de n'importe quel A
.C
est le $hostname
B
se connecte à; La communication qui va normalement à D
de A
atteint maintenant D
de C
.D
est un serveur, il voit la communication de C
et n'est peut-être pas conscient que A
et B
sont impliqués; Il peut y avoir beaucoup de serveurs.Certaines de ces lettres peuvent faire référence à la même machine dans certains cas d'utilisation particuliers. Évidemment, tout cas où A
= C
ne donne aucun avantage direct sur simple A -> D
Connexion, mais il y a d'autres cas utiles.
Disons que vous exécutez la commande ssh
indiquée ci-dessus et que vous dites votre local navigateur à utiliser des chaussettes à localhost:$port_number
. C'est le cas où A
= B
. Le trafic de votre navigateur sera envoyé et que vous visiterez des sites (D
) verra la communication provenant du $hostname
(C
) comme si votre navigateur est exécuté là-bas.
Si vous souhaitez que les autres ordinateurs se connectent à votre port ouvert (A
_ B
, ils utiliseront $your_IP:$port_number
comme adresse Socks Server) Vous devez:
$port_number
;-g
option avec ssh -D
;ou alors
ssh
, de sorte que leurs connexions apparaissent local (comme si A
= B
) à votre déjà exécuté ssh -D ...
Ainsi, le pare-feu n'interfère pas ni -g
est nécessaire; Cela peut être fait par ssh -L $some_port:localhost:$port_number $your_IP
invoqué à leur côté ou ssh -R $some_port:localhost:$port_number $their_IP
invoqué à vos côtés; Les clients utiliseront localhost:$some_port
comme adresse Socks Server dans leurs navigateurs.Il n'y a pas de raison $hostname
ne peut pas être B
's localhost
; ça peut. Dans ce cas B
= C
. C'est inutile lorsque vous utilisez ce proxy de chaussettes avec votre navigateur local (A
= B
= C
) mais si vous autorisez les connexions de l'extérieur, il est parfaitement logique. Je suppose que c'est ce que vous voulez faire. La commande peut être:
ssh -g -f -N -D $port_number localhost
Vous voudrez peut-être établir authentification basée sur une clé Donc, cette connexion ssh
_ Connexion de localhost
à localhost
ne demande pas votre mot de passe. La remarque ci-dessus concernant les stands de pare-feu. Quiconque capable d'utiliser $your_IP:$port_number
Comme Socks Server Adresse sera vu par les serveurs qu'ils visitent comme s'ils sont sur votre ordinateur.
Fragments pertinents de man 1 ssh
:
-D [bind_address:]port
[.____] Spécifie un transfert de port "dynamique" de niveau "dynamique" local. Cela fonctionne en allouant une prise à écouterport
du côté local, éventuellement liée à la spécifiéebind_address
. Chaque fois qu'une connexion est faite sur ce port, la connexion est transférée sur le canal sécurisé et le protocole d'application est ensuite utilisé pour déterminer où se connecter à partir de la machine distante. Actuellement, les protocoles SOCKS4 et SOCKS5 sont pris en charge etssh
agira comme un serveur de chaussettes. Seule la racine peut transmettre des ports privilégiés. [...]
-f
Demandessh
pour aller en arrière-plan juste avant l'exécution de la commande. [...]
-g
[.____] Permet aux hôtes distants de se connecter aux ports transférés locaux.
-N
Ne pas exécuter une commande distante. Ceci est utile pour simplement transférer des ports. [...]