Comment faire passer SSH par un proxy SOCKS
La commande SSH ne peut pas se connecter directement à un proxy. Cela vient du fait que le client ne gère aucun protocole comme SOCKSv5 ou SOCKSv4. L'absence de support peut se révéler assez vite problématique.
Des solutions existent, on peut passer par un programme externe pour "proxyfier" le client SSH. Les logiciels les plus connus sont torsocks et proxychains-ng. Ce sont des logiciels polyvalents qui fonctionnent avec n'importe quel programme à "proxyfier".
J'utilise personellement torsocks avec ssh, pour me connecter aux adresses .onion de mes serveurs.
Malheureusement, les logiciels pour proxyfier ne sont pas parfait. IPv6 qui est de plus en plus répandu, soulève de nouveaux problèmes chez les proxyfieurs, qui eux, fonctionnent de moins en moins bien. J'utilise torsocks pour établir une connexion de bout en bout dans le réseau Tor, mais si je dois passer par une sortie Tor, ça marche moins bien. Le problème vient des domaines normaux du clearnet, au niveau de la résolution des enregistrements AAAA (IPv6) dans leur zone DNS, pour être exact.
En conséquence, je ne peux pas utiliser Tor pour anonymiser une connexion sur le cleanet, je ne peux pas passer par une sortie Tor. (Je parle pour SSH, uniquement).
Il fallait donc trouver une autre solution : Il existe un programme capable d'établir la connexion avec le proxy, et ce n'est pas Netcat. Netcat (appelé aussi ncat ou "nc") provoque une erreur, et ne fonctionne pas avec le client SSH. De nombreux tutoriels font référence à Netcat.
Le logiciel connect-proxy gère les protocoles SOCKS et HTTP (proxy), et s'intercale entre le client et le proxy SOCKS de Tor. Il est invoqué au moment de lancer la commande pour se connecter à la machine distante. Il suffit de l'installer sur la machine locale :
# dnf install connect-proxy
Puis ajouter dans le fichier ~/.ssh/config :
ProxyCommand connect-proxy -a none -S 127.0.0.1:9050 %h %p
Exemple :
Host tor-nse
ProxyCommand connect-proxy -a none -S 127.0.0.1:9050 %h %p
IdentityFile ~/.ssh/id_ed25519
PreferredAuthentications publickey
User root
HostName nse.casperlefantom.net
Port 54321
UserKnownHostsFile ~/.ssh/known_hosts-nse.casperlefantom.net
Pour se connecter :
$ ssh tor-nse
On peut étendre son usage aux domaines .onion du réseau Tor. Je n'en ai pas l'utilité à l'heure actuelle. Mais ça marcherait.
Dans cet article, j'utilise l'adresse du proxy SOCKS de Tor "127.0.0.1:9050". Si vous avez configuré votre routeur Tor pour écouter sur l'interface localhost en IPv6, alors vous pouvez utiliser l'adresse (plus jolie) "localhost:9050" dans la config SSH.
Liste des possibilités
On ne peut pas utiliser un logiciel pour proxyfier git (quand il se connecte via ssh), ou proxyfier la commande "fedpkg" (qui utilise git + ssh).
Cette solution avec connect-proxy ouvre de nouvelles possiblités à explorer. Attention toutefois, git sait gérer le protocole SOCKSv5 quand le transport utilisé est HTTP. La solution que je propose ici est une solution alternative (lorsque SSH est la couche de transport utilisée).
Git sur fedorapeople
Pour afficher le nom d'hôte utilisé par le dépôt :
casper@vulcain:~/park-admin/playbooks-ansible$ git remote -v
origin ssh://fantom@fedorapeople.org/home/fedora/fantom/public_git/playbooks-ansible.git (fetch)
origin ssh://fantom@fedorapeople.org/home/fedora/fantom/public_git/playbooks-ansible.git (push)
~/.ssh/config :
Host fedorapeople.org
ProxyCommand connect-proxy -a none -S 127.0.0.1:9050 %h %p
IdentityFile ~/.ssh/id_ed25519
VerifyHostKeyDNS yes
User FAS_here
HostName fedorapeople.org
Port 22
UserKnownHostsFile ~/.ssh/known_hosts-fedorapeople.org
fedpkg
Pour afficher le nom d'hôte utilisé par fedpkg :
casper@vulcain:~/fedora-scm/libstrophe$ git remote -v
origin ssh://fantom@pkgs.fedoraproject.org/rpms/libstrophe (fetch)
origin ssh://fantom@pkgs.fedoraproject.org/rpms/libstrophe (push)
~/.ssh/config :
Host pkgs.fedoraproject.org
ProxyCommand connect-proxy -a none -S 127.0.0.1:9050 %h %p
IdentityFile ~/.ssh/id_ed25519
User FAS_here
HostName pkgs.fedoraproject.org
Port 22
UserKnownHostsFile ~/.ssh/known_hosts-pkgs.fedoraproject.org
Serveur Git avec une adresse .onion
Par exemple ~/.ssh/config :
Host adresse.onion
ProxyCommand connect-proxy -a none -S 127.0.0.1:9050 %h %p
IdentityFile ~/.ssh/id_ed25519
User casper
HostName adresse.onion
Port 22