comando spawn não encontrado no Ubuntu 14.04

2

Estou usando o Ubuntu 14.04 e quero bloquear o país de login do SSH usando o GeoIP (De link ),

Por favor encontre a saída do comando:

$ spawn
spawn: command not found

Para instalar o pacote expect , mas ainda não está funcionando:

apt-get install expect
expect is already the newest version

Eu quero executar o seguinte script:

cat /etc/hosts.allow
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a

Tem alguma ideia sobre o mesmo?

    
por Nullpointer 25.07.2016 / 13:00

2 respostas

5

spawn é expect comando específico, por exemplo, você precisa interpretar spawn usando expect .

Na maioria das vezes, você usaria um script expect e usaria spawn dentro dele para iniciar um novo processo.

Por exemplo:

#!/usr/bin/expect -f
spawn ssh host
expect ....

Do terminal diretamente:

% expect -c 'spawn whoami'
spawn whoami

Por padrão spawn ecoa o comando, portanto, a saída no terminal.

    
por heemayl 25.07.2016 / 13:10
2

Nesse caso, parece que spawn refere-se à extensão spawn à sintaxe hosts.allow , conforme descrito na seção RUNNING OTHER COMMANDS da página man hosts_options (5) ( man hosts_options ):

RUNNING OTHER COMMANDS
    aclexec shell_command
           Execute,  in a child process, the specified shell command, after
           performing   the   %<letter>   expansions   described   in   the
           hosts_access(5)  manual  page.   The  command  is  executed with
           stdin, stdout and stderr connected to the null device,  so  that
           it won't mess up the conversation with the client host. Example:

              smtp : ALL : aclexec checkdnsbl %a

           executes,  in  a  background  child  process,  the shell command
           "checkdnsbl %a" after replacing %a by the address of the  remote
           host.

           The  connection  will be allowed or refused depending on whether
           the command returns a true or false exit status.

    spawn shell_command
           Execute, in a child process, the specified shell command,  after
           performing   the   %<letter>   expansions   described   in   the
           hosts_access(5) manual  page.   The  command  is  executed  with
           stdin,  stdout  and stderr connected to the null device, so that
           it won't mess up the conversation with the client host. Example:

              spawn (/usr/sbin/safe_finger -l @%h | /usr/bin/mail root) &

           executes, in a  background  child  process,  the  shell  command
           "safe_finger  -l @%h | mail root" after replacing %h by the name
           or address of the remote host.

O fato de spawn retornar um erro quando você tenta executá-lo fora desse contexto (isto é, como um comando no shell) não precisa preocupar com você - se você está tendo problemas com a operação adequada do script de filtragem GeoIP uma questão separada.

Para demonstrar a operação bem-sucedida da extensão hosts.allow spawn no Ubuntu 14.04 sem ficar emaranhada no GeoIP, você pode criar um script /usr/local/bin/sshfilter.sh executável mínimo que simplesmente registra o endereço IP e, em seguida, retorna 0, por exemplo,

#!/bin/sh

logger "$0: connection from $1"

exit 0

Depois, com as seguintes linhas adicionadas aos arquivos hosts:

Em hosts.deny:

sshd: ALL

Em hosts.allow:

sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a

Em seguida, execute

tail -f /var/log/syslog

em uma janela de terminal e, em outra, tente efetuar login via SSH:

ssh localhost

Você deve ver uma mensagem na cauda do syslog como

Jul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1

Você pode confirmar que ele também funciona com aclexec no lugar de spawn , conforme sugerido no artigo vinculado. Na verdade, neste caso, você deve usar aclexec , pois spawn não usa o código de saída do processo gerado para determinar se deve permitir a conexão - qual aclexec .

    
por steeldriver 25.07.2016 / 13:25