Вариант 1 будет проходить аутентификацию дважды. Один раз с помощью прокси-команды, чтобы установить соединение, и снова с помощью исходной команды ssh. Вы также можете вместо этого сделать вариант 1 просто netcat %h %p
и использовать параметры хоста, чтобы выполнить то же самое, что вы хотите от своей команды ssh.
Host target_host
HostName 172.16.0.1
LogLevel QUIET
ForwardX11 no
ProxyCommand netcat %h %p
Однако даже при этом потребуется pty для поддержки netcat и дополнительный процесс как часть соединения.
Вариант 2 делает то же самое, что и netcat, но внутренне и не выделяет pty, хотя это можно переопределить, чтобы он был точно таким же, как вариант 1, если это необходимо. Это также предотвращает любые настройки на Jumphost, такие как переадресация агента.
Варианты 1 и 2 используют ProxyCommand, который используется как общий способ автоматизации установки соединения. В основном эти варианты существуют, потому что ProxyJump существовал только после него. Но ProxyCommand можно использовать для более сложных действий с настройкой соединения. В документации приводятся примеры его использования для настройки прокси-серверов HTTP CONNECT для переадресации вашего соединения.
Вариант 3 использует ProxyJump, который по сути является встроенным TCP-прокси и больше всего похож на Вариант 2, но допускает более простое и строгое управление цепочкой.Без него то же самое выглядело бы так:
Host jumphost2
ProxyCommand ssh -W %h:%p jumphost1
Host server
ProxyCommand ssh -W %h:%p jumphost2
Но с ProxyJump это выглядело бы так:
Host server
ProxyJump jumphost2,jumphost1
Не -стилистических различий нет; POSIX указывает , что при распознавании токенов в оболочке
If the current character is a '#', it and all subsequent characters up to, but excluding, the next <newline> shall be discarded as a comment. The <newline> that ends the line is not considered part of the comment.
Я не знаю ни одной оболочки, в которой пробел имел бы значение. Например, в man bash
говорится:
In a non-interactive shell, or an interactive shell in which
the interactive_comments option to the shopt builtin is enabled
(see SHELL BUILTIN COMMANDS below), a word beginning with #
causes that word and all remaining characters on that line to
be ignored.
В частности, сказано, что все символы после #игнорируются.
Лично я предпочитаю ставить пробел после #.
Влияние на выполнение нет, стиль кодирования и удобочитаемость, возможно, а также у того, кто написал сценарий, вероятно, есть парсер для удаления комментариев или отображения, когда они этого хотят.