Клиент SSH: стук порта (выполняют команду прежде, чем соединиться),

Как у меня может быть последовательность стука порта (или команда, которая делает стук порта), выполняемый до попытки установить соединение SSH?

Предпочтительно использование предварительно установленного ssh команда, но также и готовый переключиться, если нет никакой "стандартной альтернативы".

2
задан 4 January 2017 в 07:57

3 ответа

Можно также попытаться использовать опцию 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'        
  • %h => имя хоста (myhost.net)
  • %p => порт (22)

И можно соединиться с хостом с: ssh user@thehost

Необходимо также смочь использовать опцию непосредственно из командной строки с: ssh -o ProxyCommand="bash -c 'knock.sh %h <port1 port2 ... portX>; nc %h %p'" user@myhost.net

Примечания

Если программа пишет данные в stdout по умолчанию, это скрыто, если необходимо видеть его, добавить -v после ssh.

Также отметьте это ssh должен выполнить стук прежде, чем выполнить соединение, таким образом, общее время, которое потребуется для завершения соединения, будет больше.

У меня есть текущая конфигурация, работающая с включенным перенаправлением портов и без проблем с ним все же.

5
ответ дан 2 December 2019 в 01:32

Согласно страница справки Ubuntu на порте, стучащем , можно сделать следующее:

  1. Установка knock программа путем выполнения sudo apt-get install knockd
  2. Делают сценарий в ~/bin для установления соединения SSH для конкретного сервера:

    #!/bin/sh
    knock hostname port1 port2 port3...
    ssh hostname
    
  3. Делают исполняемый файл сценария с chmod +x ~/bin/whatever

  4. Близко терминал, вновь открыли его и работают whatever
3
ответ дан 2 December 2019 в 01:32

Альтернативой передаче всего трафика через 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 секунды для зонда.

обновлено с учетом комментариев Адриана

4
ответ дан 17 August 2020 в 22:15

Другие вопросы по тегам:

Похожие вопросы: