O ProxyCommand do ssh_config pode executar um comando local antes de conectar-se a uma máquina remota?

11

Antes que eu possa me conectar a uma máquina remota específica, tenho que executar um determinado comando local. Então, ao invés de ssh [email protected]eu tenho que fazer

local_command
ssh [email protected]

Eu gostaria de automatizar isso para que eu só precise fazer ssh remote.machine.

Eu sei que posso conseguir isso no nível do shell criando meu próprio sshscript que chama /usr/bin/ssh, mas posso fazer isso usando a opção ProxyCommand de ssh_config?

Tanto quanto eu entendo, eu preciso de algo como

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

no meu ~/.ssh/configarquivo, mas não exatamente isso, é claro, porque é circular!

Dave Wilding
fonte

Respostas:

9

Se estiver usando ProxyCommand, você deve usar algo como /usr/bin/ncpara conectar o servidor.

Para chamar seu comando antes da conexão, é necessário sh -c "command list"mesclar os dois comandos como um.

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

MAIS:

Se você local_commandé muito complicado, você pode usar um script:

cat my_connect.sh
#!/bin/bash

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

A configuração do ssh se torna:

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

Por fim, você pode adicionar seu próprio proxy ao diretório /usr/bin/nc

Lai Jiangshan
fonte
1

Use o exemplo da página que você vinculou:

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

Invoca nc (netcat) para conectar-se a um proxy (proxy em execução em 192.0.2.1:8080) e passa% he% p para o comando ssh (% h = nome do host,% p = porta)

Tim
fonte