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