Cliente SSH: porta batendo (execute o comando antes de conectar)

2

Como posso ter uma porta batendo seqüência (ou um comando que faz a porta batendo) executado antes de tentar estabelecer uma conexão SSH?

De preferência, usando o comando ssh pré-instalado, mas também disposto a mudar se não houver "alternativa padrão".

    
por linkD 03.01.2017 / 01:07

2 respostas

1

De acordo com uma página de ajuda do Ubuntu sobre batidas de porta , você pode fazer o seguinte:

  1. Instale o programa knock executando sudo apt-get install knockd
  2. Crie um script em ~/bin para estabelecer a conexão SSH para o servidor específico:

    #!/bin/sh
    knock hostname port1 port2 port3...
    ssh hostname
    
  3. Torne o script executável com chmod +x ~/bin/whatever

  4. Feche o terminal, reabra-o e execute whatever
por Chai T. Rex 04.01.2017 / 05:59
2

Você também pode tentar usar a opção ProxyCommand .

Dá-lhe a capacidade de controlar o comando usado para se conectar ao servidor; parece problemático, mas ainda não encontrei nenhum problema.

A partir do ssh_config docs:

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

Exemplo

Digamos que você tenha um comando ou script que faça o knock in IN YOUR PATH: knock.sh <host> <port1 port2 ... portX>

E você deseja se conectar a algum host: myhost.net

Você pode adicionar o seguinte ao seu ~/.ssh/config

Host thehost
    HostName myhost.net              
    ProxyCommand bash -c 'knock.sh %h <port1 port2 ... portX>; nc %h %p'        
  • % h = > o nome do host (myhost.net)
  • % p = > o porto (22)

E você pode se conectar ao seu host com: ssh user@thehost

Você também deve poder usar a opção diretamente da linha de comando com: ssh -o ProxyCommand="bash -c 'knock.sh %h <port1 port2 ... portX>; nc %h %p'" [email protected]

Notas

Se o programa gravar dados em stdout, por padrão, ele ficará oculto, se precisar vê-lo, adicione -v após ssh .

Observe também que ssh precisa executar a batida antes de realizar a conexão, portanto, o tempo total necessário para concluir a conexão será maior.

Eu tenho uma configuração atual trabalhando com o encaminhamento de porta ativado e sem problemas ainda.

    
por Moondotrai 28.12.2017 / 23:55