Before I can to connect to a particular remote machine I have to run a certain local command. So instead of ssh me@remote.machine I have to do

ssh me@remote.machine

I would like to automate this so that I only have to do ssh remote.machine.

I know that I can achieve this at the shell level by creating my own ssh script that calls /usr/bin/ssh, but can I do it using the ProxyCommand option of ssh_config?

As far as I understand it, I need something like

Host remote.machine
    ProxyCommand local_command; ssh me@remote.machine

in my ~/.ssh/config file, but not exactly this of course because it's circular!

2 Answers 2


If using ProxyCommand, you must use something like /usr/bin/nc to connect the server.

For invoking your command before connect, you need to use sh -c "command list" to merge the two commands as one.

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


If your local_command is too complicated, you can use a script:

cat my_connect.sh

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

The ssh config becomes:

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

At the last, you can add your own proxy to the /usr/bin/nc


Use the example from the page you linked:

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

Invokes nc (netcat) to connect to a proxy (proxy running on and passes %h and %p to the ssh command (%h = hostname, %p = port)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.