Le ProxyCommand de ssh_config peut-il exécuter une commande locale avant de se connecter à une machine distante?

11

Avant de pouvoir me connecter à une machine distante particulière, je dois exécuter une certaine commande locale. Donc au lieu de ssh [email protected]je dois faire

local_command
ssh [email protected]

Je voudrais automatiser cela pour que je n'ai plus qu'à le faire ssh remote.machine.

Je sais que je peux y parvenir au niveau du shell en créant mon propre sshscript qui appelle /usr/bin/ssh, mais puis-je le faire en utilisant l' option ProxyCommand de ssh_config?

Pour autant que je le comprends, j'ai besoin de quelque chose comme

Host remote.machine
    ProxyCommand local_command; ssh [email protected]

dans mon ~/.ssh/configdossier, mais pas exactement ça bien sûr car c'est circulaire!

Dave Wilding
la source

Réponses:

9

Si vous utilisez ProxyCommand, vous devez utiliser quelque chose comme /usr/bin/ncpour connecter le serveur.

Pour appeler votre commande avant de vous connecter, vous devez utiliser sh -c "command list"pour fusionner les deux commandes en une seule.

Host remote.machine
    ProxyCommand sh -c "local_command; /usr/bin/nc %h %p"

PLUS:

Si votre local_commandest trop compliqué, vous pouvez utiliser un script:

cat my_connect.sh
#!/bin/bash

local_command
/usr/bin/nc "$1" "$2"

La configuration ssh devient:

Host remote.machine
        ProxyCommand /path_to_my_connect.sh %h %p

Enfin, vous pouvez ajouter votre propre proxy au /usr/bin/nc

Lai Jiangshan
la source
1

Utilisez l'exemple de la page que vous avez liée:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.1:8080 %h %p

Appelle nc (netcat) pour se connecter à un proxy (proxy exécuté sur 192.0.2.1:8080) et transmet% h et% p à la commande ssh (% h = nom d'hôte,% p = port)

Tim
la source