Может ли ssh_config ProxyCommand выполнить локальную команду перед подключением к удаленному компьютеру?

11

Прежде чем я смогу подключиться к определенной удаленной машине, мне нужно выполнить определенную локальную команду. Поэтому вместо того ssh me@remote.machine, чтобы сделать

local_command
ssh me@remote.machine

Я хотел бы автоматизировать это так, что мне нужно только сделать ssh remote.machine.

Я знаю, что могу достичь этого на уровне оболочки, создав собственный sshскрипт, который вызывает /usr/bin/ssh, но могу ли я сделать это с помощью опции ProxyCommandssh_config ?

Насколько я понимаю, мне нужно что-то вроде

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

в моем ~/.ssh/configфайле, но не совсем это, конечно, потому что он круговой!

Дейв Уилдинг
источник

Ответы:

9

При использовании ProxyCommandвы должны использовать что-то вроде /usr/bin/ncподключения к серверу.

Для вызова вашей команды перед подключением вам нужно использовать sh -c "command list"для объединения двух команд в одну.

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

БОЛЬШЕ:

Если вы local_commandслишком сложны, вы можете использовать скрипт:

cat my_connect.sh
#!/bin/bash

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

Конфигурация ssh становится:

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

Наконец, вы можете добавить свой собственный прокси в /usr/bin/nc

Лай Цзяншань
источник
1

Используйте пример со страницы, на которую вы ссылались:

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

Вызывает nc (netcat) для подключения к прокси (прокси работает на 192.0.2.1:8080) и передает% h и% p команде ssh (% h = имя хоста,% p = порт)

Тим
источник