All links of one day
in a single page.
<Previous day - Next day>

rss_feedDaily RSS Feed
floral_left The Daily Shaarli floral_right
——————————— July 26, 2016 - Tuesday 26, July 2016 ———————————
ssh - linux -

Très pratique quand pour accéder à un host on doit rebondir sur un autre.

La solution naïve est bien sûr ssh host1 -t 'ssh host2', mais il y a plusieurs problèmes :

  • ne peut pas être automatisé proprement (autant que je sache) : pas de ssh unalias
  • nécessite -t pour un shell interactif
  • comme le second SSH est bêtement lancé sur la seconde machine, l'agent SSH local n'est pas disponible (on pourrait utiliser -A, mais ça apporte son lot de problèmes)

La solution via ProxyCommand est beaucoup mieux, puisque ça donne un proxy au SSH local lui-même, donc pas besoin de -t explicite, et pas besoin de forwarder l'agent (ça se passe normalement à travers le tunnel ainsi créé).
<edit> De plus, comme c'est une configuration au niveau de SSH, tout ce qui l'utilise en profite : scp, rsync, etc. </edit>
<edit2> Ajout de la version avec ssh -W à la place de nc </edit2>

J'en arrive personnellement à ça (avec les hosts renommés)

# jump to server2 through server1
Host server2
    ProxyCommand ssh -W %h:%p %r@server1
    # ou alternativement avec `nc` si ssh est trop vieux pour connaître -W
    #ProxyCommand ssh %r@server1 nc %h %p

Bien sûr ça se combine avec un alias local facilement :

# jump to server2 through server1
Host localalias
    Hostname server2
    ProxyCommand ssh -W %h:%p %r@server1

À noter que le lookup de server2 a lieu sur le proxy, donc un nom local au proxy marchera -- mais pas l'inverse, un alias local sur le client ne résoudra pas.

Aussi, puisque la commande proxy est un SSH, on peut lui passer toute option SSH (dans mon cas, -4 par ce que le lien IPv6 entre moi et l'host a une forte latence que le lien IPv4 n'a pas).

-