¿Puede ProxyCommand de ssh_config ejecutar un comando local antes de conectarse a una máquina remota?

11

Antes de poder conectarme a una máquina remota en particular, tengo que ejecutar un cierto comando local. Entonces, en lugar de ssh [email protected]tener que hacer

local_command
ssh [email protected]

Me gustaría automatizar esto para que solo tenga que hacerlo ssh remote.machine.

Sé que puedo lograr esto a nivel de shell creando mi propio sshscript que llama /usr/bin/ssh, pero ¿puedo hacerlo usando la opción ProxyCommand de ssh_config?

Por lo que yo entiendo, necesito algo como

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

en mi ~/.ssh/configarchivo, pero no exactamente esto, por supuesto, ¡porque es circular!

Dave Wilding
fuente

Respuestas:

9

Si lo usa ProxyCommand, debe usar algo como /usr/bin/ncconectar el servidor.

Para invocar su comando antes de conectarse, debe usarlo sh -c "command list"para fusionar los dos comandos como uno solo.

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

MÁS:

Si tu local_commandes demasiado complicado, puedes usar un script:

cat my_connect.sh
#!/bin/bash

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

La configuración ssh se convierte en:

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

Por último, puede agregar su propio proxy al /usr/bin/nc

Lai Jiangshan
fuente
1

Use el ejemplo de la página que ha vinculado:

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

Invoca nc (netcat) para conectarse a un proxy (proxy que se ejecuta en 192.0.2.1:8080) y pasa% h y% p al comando ssh (% h = nombre de host,% p = puerto)

Tim
fuente