Как у меня может быть последовательность стука порта (или команда, которая делает стук порта), выполняемый до попытки установить соединение SSH?
Предпочтительно использование предварительно установленного ssh
команда, но также и готовый переключиться, если нет никакой "стандартной альтернативы".
Можно также попытаться использовать опцию ProxyCommand.
Это дает Вам, способность управлять командой раньше соединялась с сервером; звучит неприятным, но я еще не нашел проблемы с ним.
Из ssh_config документов:
ProxyCommand
Specifies the command to use to connect to the server. The command string extends to the end of the line, and is executed using the user's shell ‘exec’ directive to avoid a
lingering shell process.
In the command string, any occurrence of ‘%h’ will be substituted by the host name to connect, ‘%p’ by the port, and ‘%r’ by the remote user name. The command can be basically
anything, and should read from its standard input and write to its standard output. It should eventually connect an sshd(8) server running on some machine, or execute sshd -i
somewhere. Host key management will be done using the HostName of the host being connected (defaulting to the name typed by the user). Setting the command to “none” disables
this option entirely. Note that CheckHostIP is not available for connects with a proxy command.
This directive is useful in conjunction with nc(1) and its proxy support. For example, the following directive would connect via an HTTP proxy at 192.0.2.0:
ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
Позволяет говорят, что у Вас есть команда или сценарий, который делает стук В ВАШ ПУТЬ: knock.sh <host> <port1 port2 ... portX>
И Вы хотите соединиться с некоторым хостом: myhost.net
Можно добавить следующее к Вашему ~/.ssh/config
Host thehost
HostName myhost.net
ProxyCommand bash -c 'knock.sh %h <port1 port2 ... portX>; nc %h %p'
И можно соединиться с хостом с: ssh user@thehost
Необходимо также смочь использовать опцию непосредственно из командной строки с: ssh -o ProxyCommand="bash -c 'knock.sh %h <port1 port2 ... portX>; nc %h %p'" user@myhost.net
Если программа пишет данные в stdout по умолчанию, это скрыто, если необходимо видеть его, добавить -v
после ssh
.
Также отметьте это ssh
должен выполнить стук прежде, чем выполнить соединение, таким образом, общее время, которое потребуется для завершения соединения, будет больше.
У меня есть текущая конфигурация, работающая с включенным перенаправлением портов и без проблем с ним все же.
Согласно страница справки Ubuntu на порте, стучащем , можно сделать следующее:
knock
программа путем выполнения sudo apt-get install knockd
Делают сценарий в ~/bin
для установления соединения SSH для конкретного сервера:
#!/bin/sh
knock hostname port1 port2 port3...
ssh hostname
Делают исполняемый файл сценария с chmod +x ~/bin/whatever
whatever
Альтернативой передаче всего трафика через nc
в качестве ProxyCommand, как в принятом ответе, является добавление строки Match host/exec
в ~/.ssh/config, который эффективно выполняет только вашу команду knock
перед подключением:
Match host thehost exec "knock -d 500 %h 1234 5678"
Match host thehost.domain.com exec "knock -d 500 %h 1234 5678"
Эта строка на самом деле не делает ничего, кроме выполнения knock
, так как за директивой ничего не следует .
обновление
Чтобы сделать стук условным (и предотвратить задержку и тонну избыточных правил брандмауэра), проверьте с помощью netcat перед стуком:
Match host thehost exec "nc -zw 3 %h 22 || knock -d 500 %h 1234 5678"
Match host thehost.domain.com exec "nc -zw 3 %h 22 || knock -d 500 %h 1234 5678"
Флаг -w 3
должен указать тайм-аут 3 секунды для зонда.
обновлено с учетом комментариев Адриана